Lesen von Dateien mit einer Byte-Order-Markierung (BOM) in Go
Verarbeiten von Unicode-Dateien mit oder ohne Byte-Reihenfolge in Go Die Markierung (Stückliste) erfordert eine manuelle Bearbeitung. Obwohl es innerhalb der Kernbibliothek keinen etablierten Weg gibt, umfasst der allgemeine Ansatz:
Verwendung eines gepufferten Readers:
Java.io.BufferedReader kann dazu verwendet werden Daten aus einer Datei lesen, einschließlich der ersten paar Bytes. Hier ein Beispiel:
import ( "bufio" "os" "log" ) func main() { fd, err := os.Open("filename") if err != nil { log.Fatal(err) } defer fd.Close() br := bufio.NewReader(fd) r, _, err := br.ReadRune() if err != nil { log.Fatal(err) } if r != '\uFEFF' { br.UnreadRune() } }
Erste Bytes direkt lesen:
Wenn die io.Seeker-Schnittstelle unterstützt wird, können die ersten drei Bytes gelesen und überprüft werden. Wenn keine Stückliste identifiziert wird, kann der Dateizeiger auf den Anfang zurückgesetzt werden.
import ( "os" "log" ) func main() { fd, err := os.Open("filename") if err != nil { log.Fatal(err) } defer fd.Close() var bom [3]byte _, err = fd.Read(bom[:]) if err != nil { log.Fatal(err) } if bom[0] != 0xef || bom[1] != 0xbb || bom[2] != 0xbf { _, err = fd.Seek(0, 0) if err != nil { log.Fatal(err) } } }
Hinweis:
Diese Ansätze gehen von der UTF-8-Kodierung aus. Der Umgang mit unterschiedlichen Kodierungen erhöht die Komplexität.
Das obige ist der detaillierte Inhalt vonWie gehe ich mit Dateien mit einer Byte-Order-Markierung (BOM) in Go um?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!