Heim > Backend-Entwicklung > Golang > Wie kann ich UTF-16-Textdateien in Go korrekt lesen und dabei sowohl Stücklisten- als auch Nicht-Stücklisten-Kodierungen verarbeiten?

Wie kann ich UTF-16-Textdateien in Go korrekt lesen und dabei sowohl Stücklisten- als auch Nicht-Stücklisten-Kodierungen verarbeiten?

Susan Sarandon
Freigeben: 2024-12-27 15:32:11
Original
330 Leute haben es durchsucht

How Can I Correctly Read UTF-16 Text Files in Go, Handling Both BOM and Non-BOM Encodings?

UTF-16-Textdatei als String in Go lesen

Beim Lesen von UTF-16-Textdateien in Go kann es zu Problemen mit der Interpretation von Bytes als ASCII kommen. Dies liegt daran, dass die Standardfunktion bufio.NewReader Unicode nicht korrekt verarbeitet.

Lösung

UTF-16 mit BOM

Die neueste Version von „golang.org/x /text/encoding/unicode“ führt unicode.BOMOverride ein, das das BOM automatisch erkennt und interpretiert, um UTF-16 zu dekodieren richtig. Hier ist ein Beispiel mit ReadFileUTF16():

func ReadFileUTF16(filename string) ([]byte, error) {
    raw, err := ioutil.ReadFile(filename)
    if err != nil {
        return nil, err
    }
    win16be := unicode.UTF16(unicode.BigEndian, unicode.IgnoreBOM)
    utf16bom := unicode.BOMOverride(win16be.NewDecoder())
    unicodeReader := transform.NewReader(bytes.NewReader(raw), utf16bom)
    decoded, err := ioutil.ReadAll(unicodeReader)
    return decoded, err
}
Nach dem Login kopieren

Diese Funktion dekodiert UTF-16-Dateien mit einer Stückliste.

UTF-16 ohne Stückliste

Wenn Ihre Datei dies tut keine Stückliste enthalten, können Sie den folgenden Code verwenden:

func ReadFileUTF16WithoutBOM(filename string) ([]byte, error) {
    f, err := os.Open(filename)
    if err != nil {
        return nil, err
    }
    r := bufio.NewReader(f)

    // Read past the BOM, if any.
    var b, e = r.Peek(2)
    if (b[0] == 0xFF && b[1] == 0xFE) || (b[0] == 0xFE && b[1] == 0xFF) {
        r.Discard(2)
    }

    // Read the rest of the file.
    decoded, err := ioutil.ReadAll(r)
    return decoded, err
}
Nach dem Login kopieren

Diese Funktion überspringt alle Stücklisten und Lesen Sie die Datei als UTF-16.

Fazit

Durch die Verwendung von ReadFileUTF16() oder ReadFileUTF16WithoutBOM() können Sie sowohl BOM- als auch Nicht-BOM-UTF-16-Textdateien in Go verarbeiten und so die Genauigkeit gewährleisten Dekodierung und Darstellung Ihrer Daten.

Das obige ist der detaillierte Inhalt vonWie kann ich UTF-16-Textdateien in Go korrekt lesen und dabei sowohl Stücklisten- als auch Nicht-Stücklisten-Kodierungen verarbeiten?. 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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage