Wie gehe ich mit Byte-Order Marks (BOMs) in Unicode-Dateien in Go um?

DDD
Freigeben: 2024-11-03 13:28:31
Original
617 Leute haben es durchsucht

How to Handle Byte-Order Marks (BOMs) in Unicode Files in Go?

Unicode-Dateien mit Byte-Order Mark (BOM) lesen

Einführung
Beim Umgang mit Unicode-Dateien ist es wichtig, das Vorhandensein oder Fehlen einer BOM (Byte-Order Mark) zu verwalten. In Go gibt es keine integrierte Lösung zur automatischen Erkennung und Verarbeitung von Stücklisten. Es gibt jedoch praktische Ansätze, um dieses Szenario anzugehen.

Puffered-Reader-Ansatz
Mit einem gepufferten Reader können Sie einen Blick in die ersten paar Bytes der Datei werfen. Hier ist ein einfaches Beispiel:

<code class="go">import (
    "bufio"
    "os"
    "log"
)

func main() {
    fd, err := os.Open("filename")
    if err != nil {
        log.Fatal(err)
    }
    defer closeOrDie(fd)
    br := bufio.NewReader(fd)
    r, _, err := br.ReadRune()
    if err != nil {
        log.Fatal(err)
    }
    if r != '\uFEFF' {
        br.UnreadRune() // Not a BOM -- put the rune back
    }
    // Continue working with br as you would with fd
}</code>
Nach dem Login kopieren

Seeker-Schnittstellenansatz
Wenn Sie ein Objekt haben, das die io.Seeker-Schnittstelle implementiert (z. B. eine *os.File), können Sie dies tun Überprüfen Sie die ersten drei Bytes und suchen Sie zurück zum Anfang der Datei, wenn es sich nicht um eine Stückliste handelt.

<code class="go">import (
    "os"
    "log"
)

func main() {
    fd, err := os.Open("filename")
    if err != nil {
        log.Fatal(err)
    }
    defer closeOrDie(fd)
    bom := [3]byte
    _, err = io.ReadFull(fd, bom[:])
    if err != nil {
        log.Fatal(err)
    }
    if bom[0] != 0xef || bom[1] != 0xbb || bom[2] != 0xbf {
        _, err = fd.Seek(0, 0) // Not a BOM -- seek back to the beginning
        if err != nil {
            log.Fatal(err)
        }
    }
    // Continue reading real data from fd
}</code>
Nach dem Login kopieren

Überlegungen
Diese Beispiele gehen von der UTF-8-Kodierung aus. Wenn Sie unterschiedliche Kodierungen oder nicht durchsuchbare Streams verarbeiten müssen, sind möglicherweise zusätzliche Strategien erforderlich.

Das obige ist der detaillierte Inhalt vonWie gehe ich mit Byte-Order Marks (BOMs) in Unicode-Dateien in Go um?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage