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

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

PHPz
PHPzoriginal
2023-04-03 11:51:012041parcourir

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

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

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