Maison > développement back-end > Golang > le corps du texte

Pourquoi mon code Go produit-il des guillemets supplémentaires lors de l'écriture de chaînes entre guillemets dans un fichier CSV à l'aide de « encoding/csv » ?

Mary-Kate Olsen
Libérer: 2024-10-26 20:17:29
original
709 Les gens l'ont consulté

Why does my Go code produce extra quotes when writing quoted strings to a CSV file using `encoding/csv`?

Résultats CSV étranges pour les chaînes citées à l'aide de l'encodage/CSV de Go

Dans cet extrait de code, l'objectif est d'écrire des données dans un fichier CSV, en garantissant que les chaînes citées à l'intérieur les données sont correctement échappées. Cependant, le CSV résultant contient des guillemets supplémentaires, ce qui entraîne des incohérences.

<code class="go">package main

import (
    "encoding/csv"
    "fmt"
    "log"
    "os"
)

func main() {
    f, err := os.Create("test.csv")
    if err != nil {
        log.Fatal(err)
    }
    defer f.Close()

    w := csv.NewWriter(f)
    record := []string{"Unquoted string", "Cr@zy text with , and \ and \" etc"}
    w.Write(record)

    record = []string{"Quoted string", fmt.Sprintf("%q", "Cr@zy text with , and \ and \" etc")}
    w.Write(record)

    w.Flush()
}</code>
Copier après la connexion

Le résultat attendu pour la chaîne entre guillemets est :

[Unquoted string Cr@zy text with , and \ and " etc]
[Quoted string "Cr@zy text with , and \ and \" etc"]
Copier après la connexion

Cependant, le résultat réel contient des guillemets supplémentaires :

Unquoted string,"Cr@zy text with , and \ and "" etc"
Quoted string,"""Cr@zy text with , and \ and \"" etc"""
Copier après la connexion

Comprendre les guillemets supplémentaires

Les guillemets supplémentaires dans la chaîne entre guillemets sont le résultat du respect de la norme CSV, qui exige que les guillemets doubles soient échappés sous la forme de deux guillemets doubles. citations. Ceci est nécessaire pour faire la distinction entre les guillemets doubles réels dans les données et ceux utilisés pour la délimitation des enregistrements.

Solution

Le code n'a pas besoin de s'inquiéter de l'échappement des guillemets doubles car le lecteur CSV les supprime automatiquement. Par conséquent, la solution consiste à supprimer les guillemets doubles supplémentaires lors de l'écriture de la chaîne entre guillemets.

Code modifié

<code class="go">for _, record := range [][]string{
    {"Unquoted string", "Cr@zy text with , and \ and \" etc"},
    {"Quoted string", "Cr@zy text with , and \ and \" etc"},
} {
    record[1] = fmt.Sprintf("%q", record[1][1:len(record[1])-1])
    w.Write(record)
}</code>
Copier après la connexion

Sortie mise à jour

Unquoted string,Cr@zy text with , and \ and " etc
Quoted string,"Cr@zy text with , and \ and \" etc"
Copier après la connexion

Avec ce changement, la chaîne entre guillemets est désormais correctement échappée et les guillemets supplémentaires sont supprimés.

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!

source:php.cn
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
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!