Maison > développement back-end > Golang > Comment lire des fichiers texte codés non UTF-8 (par exemple, GBK) dans Go ?

Comment lire des fichiers texte codés non UTF-8 (par exemple, GBK) dans Go ?

Susan Sarandon
Libérer: 2024-12-01 12:37:16
original
692 Les gens l'ont consulté

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

Lecture de fichiers texte non UTF-8 dans Go

La lecture et l'écriture de fichiers texte non UTF-8 peuvent être difficiles dans Go car la bibliothèque standard suppose le codage UTF-8. Cet article aborde ce problème et propose une solution complète en utilisant les sous-dépôts de Go.

Problème :

Comment pouvons-nous lire des fichiers texte encodés dans des formats non UTF-8 , comme GBK, dans Allez-y ?

Solution :

Pour lire des fichiers dans des encodages non UTF-8, nous utilisons le package golang.org/x/text/encoding. Ce package définit une interface pour les encodages de caractères génériques qui facilitent la conversion vers et depuis UTF-8.

En particulier, pour l'encodage GBK, nous utilisons le sous-paquet golang.org/x/text/encoding/simplifiedchinese, qui fournit des implémentations de codage GB18030, GBK et HZ-GB2312. Ces implémentations implémentent l'interface encoding.Encoding.

Implémentation :

Voici un exemple démontrant la lecture et l'écriture d'un code encodé en GBK fichier :

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)
    }
}
Copier après la connexion

Aire de jeux :

https://go.dev/play/p/fFIy9VES6cL

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 de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal