Heim > Backend-Entwicklung > Golang > Wie kann ich eine UTF-16-Textdatei in Go korrekt als String lesen?

Wie kann ich eine UTF-16-Textdatei in Go korrekt als String lesen?

Susan Sarandon
Freigeben: 2024-12-30 13:28:14
Original
189 Leute haben es durchsucht

How Can I Correctly Read a UTF-16 Text File as a String in Go?

Eine UTF-16-Textdatei als String in Go lesen

Das Problem verstehen

Beim Einlesen einer UTF-16-Textdatei in ein Byte Beim Erstellen eines Arrays mit Standardeingabemethoden werden die UTF-16-kodierten Zeichen der Datei möglicherweise nicht richtig interpretiert. Dies kann dazu führen, dass die Bytes als ASCII behandelt werden, was zu falschen Zeichenfolgendarstellungen führt.

Lösung mit UTF-16-Dekodierung

Um eine UTF-16-Textdatei richtig zu lesen, ist es wichtig, sie zu verwenden Methoden, die speziell für die Verarbeitung der UTF-16-Codierung entwickelt wurden. Das Paket golang.org/x/text/encoding/unicode stellt die notwendige Funktionalität für diesen Zweck bereit.

ReadFileUTF16()-Funktion

func ReadFileUTF16(filename string) ([]byte, error) {
    // Read the file into a byte array
    raw, err := ioutil.ReadFile(filename)
    if err != nil {
        return nil, err
    }

    // Create a transformer that converts MS-Windows default to UTF8
    win16be := unicode.UTF16(unicode.BigEndian, unicode.IgnoreBOM)

    // Override the BOM to ensure it is respected
    utf16bom := unicode.BOMOverride(win16be.NewDecoder())

    // Apply the transformer to the input byte array
    unicodeReader := transform.NewReader(bytes.NewReader(raw), utf16bom)

    // Decode the data into a new byte array
    decoded, err := ioutil.ReadAll(unicodeReader)
    return decoded, err
}
Nach dem Login kopieren

NewScannerUTF16()-Funktion

Für Szenarien, in denen das Lesen der gesamten Datei nicht möglich ist, erstellt die folgende Funktion einen Scanner, der dieselbe UTF-16-Dekodierung verwendet Logik:

func NewScannerUTF16(filename string) (utfScanner, error) {
    // Read the file into a []byte
    file, err := os.Open(filename)
    if err != nil {
        return nil, err
    }

    // Create a transformer that converts MS-Windows default to UTF8
    win16be := unicode.UTF16(unicode.BigEndian, unicode.IgnoreBOM)

    // Override the BOM to ensure it is respected
    utf16bom := unicode.BOMOverride(win16be.NewDecoder())

    // Apply the transformer to the input file
    unicodeReader := transform.NewReader(file, utf16bom)
    return unicodeReader, nil
}
Nach dem Login kopieren

Diskussion über BOM- und Unicode-Unterstützung

Das Paket golang.org/x/text/encoding/unicode interpretiert Byte Order Marks (BOMs) intelligent, um die verwendete Codierung zu bestimmen die Datei. Es ist jedoch wichtig zu beachten, dass die ReadLine-Funktion des bufio-Pakets keine Unicode-Dekodierung unterstützt.

Weitere Ressourcen

Weitere Anpassungen und Optionen im Zusammenhang mit der UTF-16-Dekodierung finden Sie in der Open Source Modul unter https://github.com/TomOnTime/utfutil/.

Das obige ist der detaillierte Inhalt vonWie kann ich eine UTF-16-Textdatei in Go korrekt als String lesen?. 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