Heim > Backend-Entwicklung > Golang > Wie lese ich nicht-UTF-8-codierte Textdateien (z. B. GBK) in Go?

Wie lese ich nicht-UTF-8-codierte Textdateien (z. B. GBK) in Go?

Susan Sarandon
Freigeben: 2024-12-01 12:37:16
Original
620 Leute haben es durchsucht

How to Read Non-UTF-8 Encoded Text Files (e.g., GBK) in Go?

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)
    }
}
Nach dem Login kopieren

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!

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