Maison développement back-end Golang Comment résoudre le problème tronqué des fichiers CSV Golang

Comment résoudre le problème tronqué des fichiers CSV Golang

Apr 03, 2023 am 11:51 AM

Avec 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.

  1. 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.

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

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

可以看到,代码中使用gocsv

2.2 Utilisation de bibliothèques tierces
  1. 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 :
  2. rrreee
Vous pouvez voir que la bibliothèque 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!

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

Article chaud

Repo: Comment relancer ses coéquipiers
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
Combien de temps faut-il pour battre Split Fiction?
3 Il y a quelques semaines By DDD
R.E.P.O. Crystals d'énergie expliqués et ce qu'ils font (cristal jaune)
1 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island Adventure: Comment obtenir des graines géantes
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌

Article chaud

Repo: Comment relancer ses coéquipiers
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
Combien de temps faut-il pour battre Split Fiction?
3 Il y a quelques semaines By DDD
R.E.P.O. Crystals d'énergie expliqués et ce qu'ils font (cristal jaune)
1 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island Adventure: Comment obtenir des graines géantes
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌

Tags d'article chaud

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

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

GO Language Pack Import: Quelle est la différence entre le soulignement et sans soulignement? GO Language Pack Import: Quelle est la différence entre le soulignement et sans soulignement? Mar 03, 2025 pm 05:17 PM

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 mettre en œuvre le transfert d'informations à court terme entre les pages du cadre Beego? Mar 03, 2025 pm 05:22 PM

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 écrire des objets et des talons simulés pour les tests en Go? Mar 10, 2025 pm 05:38 PM

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 puis-je utiliser des outils de traçage pour comprendre le flux d'exécution de mes applications GO? Mar 10, 2025 pm 05:36 PM

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 convertir la liste des résultats de la requête MySQL en une tranche de structure personnalisée dans le langage Go? Mar 03, 2025 pm 05:18 PM

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 rédigez-vous des tests unitaires en Go? Mar 21, 2025 pm 06:34 PM

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

Comment écrire des fichiers dans GO Language de manière pratique? Comment écrire des fichiers dans GO Language de manière pratique? Mar 03, 2025 pm 05:15 PM

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? Comment puis-je définir des contraintes de type personnalisé pour les génériques en Go? Mar 10, 2025 pm 03:20 PM

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

See all articles