Heim >Backend-Entwicklung >Golang >Wie lese und schreibe ich nicht-UTF-8-codierte Textdateien in Go?

Wie lese und schreibe ich nicht-UTF-8-codierte Textdateien in Go?

Mary-Kate Olsen
Mary-Kate OlsenOriginal
2024-12-04 20:40:12952Durchsuche

How to Read and Write Non-UTF-8 Encoded Text Files in Go?

Lesen und Schreiben von Nicht-UTF-8-Textdateien in Go

Hintergrund

Von Standardmäßig geht die Standardbibliothek in Go davon aus, dass Textdateien in UTF-8 codiert sind. Es gibt jedoch Situationen, in denen Sie auf Textdateien stoßen, die in unterschiedlichen Kodierungen codiert sind, z. B. GBK.

Lösung

Zum Lesen und Schreiben von Nicht-UTF-8-Textdateien In Go können Sie die folgenden Schritte ausführen:

Nicht-UTF-8 lesen Dateien

  1. Importieren Sie das erforderliche Paket: import "golang.org/x/text/encoding/simplifiedchinese"
    Dieses Paket stellt GB18030, GBK und HZ bereit -GB2312-Kodierungsimplementierungen.
  2. Erstellen Sie eine io.Reader mit transform.NewReader:

    f, err := os.Open(filename)
    if err != nil {
        log.Fatal(err)
    }
    r := transform.NewReader(f, simplifiedchinese.GBK.NewDecoder())

Nicht-UTF-8-Dateien schreiben

  1. Dasselbe Paket importieren:importieren "golang.org/x/text/encoding/simplifiedchinese"
  2. Erstellen Sie einen io.Writer mit transform.NewWriter:

    f, err := os.Create(filename)
    if err != nil {
        log.Fatal(err)
    }
    w := transform.NewWriter(f, simplifiedchinese.GBK.NewEncoder())

Beispiel

Das folgende Beispiel zeigt So lesen und schreiben Sie eine GBK-codierte Textdatei:

import (
    "bufio"
    "fmt"
    "log"
    "os"

    "golang.org/x/text/encoding/simplifiedchinese"
    "golang.org/x/text/transform"
)

func main() {
    const filename = "example_GBK_file"
    exampleWriteGBK(filename)
    exampleReadGBK(filename)
}

func exampleReadGBK(filename string) {
    f, err := os.Open(filename)
    if err != nil {
        log.Fatal(err)
    }

    r := transform.NewReader(f, simplifiedchinese.GBK.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)
    }

    if err := f.Close(); err != nil {
        log.Fatal(err)
    }
}

func exampleWriteGBK(filename string) {
    f, err := os.Create(filename)
    if err != nil {
        log.Fatal(err)
    }

    w := transform.NewWriter(f, simplifiedchinese.GBK.NewEncoder())

    // Write some text from the Wikipedia GBK page that includes Chinese
    _, 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)
    }

    if err := f.Close(); err != nil {
        log.Fatal(err)
    }
}

Dieser Code öffnet eine GBK-codierte Textdatei, liest ihren Inhalt und schreibt ihn in eine andere GBK-codierte Textdatei.

Das obige ist der detaillierte Inhalt vonWie lese und schreibe ich nicht-UTF-8-codierte Textdateien in Go?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
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