Nicht-UTF-8-Textdateien in Go lesen
Das Lesen und Schreiben von Nicht-UTF-8-Textdateien kann in Go seitdem eine Herausforderung sein Die Standardbibliothek geht von der UTF-8-Kodierung aus. Dieser Artikel befasst sich mit diesem Problem und bietet eine umfassende Lösung mithilfe der Unterrepositorys von Go.
Problem:
Wie können wir Textdateien lesen, die in Nicht-UTF-8-Formaten codiert sind? , wie GBK, in Los?
Lösung:
Um Dateien in Nicht-UTF-8-Kodierungen zu lesen, verwenden wir das Paket golang.org/x/text/encoding. Dieses Paket definiert eine Schnittstelle für generische Zeichenkodierungen, die die Konvertierung in und von UTF-8 erleichtern.
Insbesondere für die GBK-Kodierung verwenden wir das Unterpaket golang.org/x/text/encoding/simplifiedchinese. das GB18030-, GBK- und HZ-GB2312-Kodierungsimplementierungen bereitstellt. Diese Implementierungen implementieren die Schnittstelle „encoding.Encoding“.
Implementierung:
Hier ist ein Beispiel, das das Lesen und Schreiben einer GBK-codierten Datei demonstriert Datei:
package main import ( "bufio" "fmt" "log" "os" "golang.org/x/text/encoding/simplifiedchinese" "golang.org/x/text/transform" ) var enc = simplifiedchinese.GBK func main() { // Example filename const filename = "example_GBK_file" exampleWriteGBK(filename) exampleReadGBK(filename) } func exampleReadGBK(filename string) { f, err := os.Open(filename) if err != nil { log.Fatal(err) } // Convert GBK to UTF-8 on the fly r := transform.NewReader(f, enc.NewDecoder()) sc := bufio.NewScanner(r) for sc.Scan() { fmt.Printf("Read line: %s\n", sc.Bytes()) } if err := sc.Err(); err != nil { log.Fatal(err) } } func exampleWriteGBK(filename string) { f, err := os.Create(filename) if err != nil { log.Fatal(err) } w := transform.NewWriter(f, enc.NewEncoder()) // Example text with Chinese characters _, err = fmt.Fprintln(w, `In 1995, China National Information Technology Standardization Technical Committee set down the Chinese Internal Code Specification (Chinese: 汉字内码扩展规范(GBK); pinyin: Hànzì Nèimǎ Kuòzhǎn Guīfàn (GBK)), Version 1.0, known as GBK 1.0, which is a slight extension of Codepage 936. The newly added 95 characters were not found in GB 13000.1-1993, and were provisionally assigned Unicode PUA code points.`) if err != nil { log.Fatal(err) } }
Spielplatz:
https://go.dev/play/p/fFIy9VES6cL
Das obige ist der detaillierte Inhalt vonWie lese ich nicht-UTF-8-codierte Textdateien (z. B. GBK) in Go?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!