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.
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.
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 }
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 }
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 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!