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
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
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!