Comment résoudre le problème tronqué des fichiers CSV Golang
Apr 03, 2023 am 11:51 AMAvec la large application des fichiers CSV dans l'échange de données, de plus en plus de développeurs ont commencé à prêter attention à la lecture et à l'écriture de fichiers CSV. En tant qu'excellent langage, Golang fournit naturellement sa propre bibliothèque CSV pour permettre aux développeurs de lire et d'écrire des fichiers CSV. Cependant, lorsque les développeurs utilisent Golang pour lire des fichiers CSV, ils rencontrent parfois des caractères tronqués. Cet article explique comment résoudre le problème des fichiers CSV tronqués dans Golang.
- Encodage de fichiers CSV
Les fichiers CSV sont des fichiers texte brut et peuvent être encodés de différentes manières, telles que UTF-8, GBK, GB2312, etc. Dans Golang, le codage UTF-8 est utilisé par défaut lors de la lecture des fichiers CSV, donc si le fichier CSV utilise d'autres formats de codage, des caractères tronqués peuvent apparaître.
- Solution
Pour le problème des fichiers CSV tronqués, il existe les solutions suivantes :
2.1 Spécifier l'encodage du fichier
Vous pouvez éviter le problème de l'altération en définissant l'encodage du fichier CSV. En prenant l'encodage GBK comme exemple, le code est le suivant :
package main import ( "encoding/csv" "fmt" "io/ioutil" "log" ) func main() { f, err := ioutil.ReadFile("<filename>") if err != nil { log.Fatal(err) } r := csv.NewReader(transform.NewReader(bytes.NewReader(f), simplifiedchinese.GBK.NewDecoder())) records, err := r.ReadAll() if err != nil { log.Fatal(err) } fmt.Println(records) }
Vous pouvez voir que la fonction ReadFile
est utilisée dans le code pour lire le fichier CSV, et l'encodage du fichier est spécifié en définissant NouveauDécodeur pour GBK. ReadFile
函数读取CSV文件,同时通过设置NewDecoder
的方式指定文件编码为GBK。
2.2 使用第三方库
除了自带的CSV库之外,golang中还有许多优秀的第三方CSV库可以使用。在读取CSV文件的时候,可以使用这些库来避免乱码问题。如使用go-csv
库,可以在读取CSV文件时设置编码方式:
package main import ( "fmt" "github.com/gocarina/gocsv" "os" ) type Record struct { Name string `csv:"name"` Age int `csv:"age"` } func main() { f, err := os.Open("<filename>") if err != nil { fmt.Println(err) return } var records []Record if err := gocsv.Unmarshal(f, &records); err != nil { fmt.Println(err) return } fmt.Println(records) }
可以看到,代码中使用gocsv
- En plus de la bibliothèque CSV intégrée, il existe de nombreuses excellentes bibliothèques CSV tierces disponibles dans Golang. Lors de la lecture de fichiers CSV, vous pouvez utiliser ces bibliothèques pour éviter les caractères tronqués. Si vous utilisez la bibliothèque
go-csv
, vous pouvez définir la méthode d'encodage lors de la lecture des fichiers CSV : rrreee
gocsv
est utilisée dans le code pour lire les fichiers CSV Dans le même temps, l'encodage du fichier est défini sur GBK lors de l'analyse. 🎜Résumé🎜🎜🎜Le problème de fichier CSV tronqué n'est pas rare dans Golang, mais en spécifiant l'encodage de fichier et en utilisant des bibliothèques tierces, nous pouvons facilement éviter ce problème. Si vous rencontrez également le problème des fichiers CSV tronqués, vous pouvez essayer les deux solutions ci-dessus. 🎜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!

Article chaud

Outils chauds Tags

Article chaud

Tags d'article chaud

Bloc-notes++7.3.1
Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise
Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1
Puissant environnement de développement intégré PHP

Dreamweaver CS6
Outils de développement Web visuel

SublimeText3 version Mac
Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Sujets chauds

GO Language Pack Import: Quelle est la différence entre le soulignement et sans soulignement?

Comment mettre en œuvre le transfert d'informations à court terme entre les pages du cadre Beego?

Comment écrire des objets et des talons simulés pour les tests en Go?

Comment puis-je utiliser des outils de traçage pour comprendre le flux d'exécution de mes applications GO?

Comment convertir la liste des résultats de la requête MySQL en une tranche de structure personnalisée dans le langage Go?

Comment rédigez-vous des tests unitaires en Go?

Comment écrire des fichiers dans GO Language de manière pratique?

Comment puis-je définir des contraintes de type personnalisé pour les génériques en Go?
