Maison >développement back-end >Golang >Comment lire et écrire des fichiers texte codés non UTF-8 dans Go ?

Comment lire et écrire des fichiers texte codés non UTF-8 dans Go ?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2024-12-04 20:40:12954parcourir

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

Lecture et écriture de fichiers texte non UTF-8 dans Go

Arrière-plan

Par par défaut, la bibliothèque standard de Go suppose que les fichiers texte sont codés en UTF-8. Cependant, il existe des scénarios dans lesquels vous pouvez rencontrer des fichiers texte codés dans différents encodages, tels que GBK.

Solution

Pour lire et écrire des fichiers texte non UTF-8 dans Go, vous pouvez utiliser les étapes suivantes :

Lecture non-UTF-8 Fichiers

  1. Importez le package nécessaire : import "golang.org/x/text/encoding/simplifiedchinese"
    Ce package fournit GB18030, GBK et HZ -Implémentations d'encodage GB2312.
  2. Créer un io.Reader utilisant transform.NewReader :

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

Écriture de fichiers non UTF-8

  1. Importer le même package : importer "golang.org/x/text/encoding/simplifiedchinese"
  2. Créez un io.Writer à l'aide de transform.NewWriter :

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

Exemple

L'exemple suivant montre comment pour lire et écrire un fichier texte codé en GBK :

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)
    }
}

Ce code ouvre un fichier texte codé en GBK, lit son contenu et l'écrit dans un autre fichier texte codé en GBK.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn