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.
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()
}
Le résultat attendu pour la chaîne citée est :
[Unquoted string Cr@zy text with , and \ and " etc] [Quoted string "Cr@zy text with , and \\ and \" etc"]
Cependant, la sortie réelle contient des guillemets supplémentaires :
Unquoted string,"Cr@zy text with , and \ and "" etc" Quoted string,"""Cr@zy text with , and \\ and \"" etc"""
Comprendre les citations supplémentaires
Les citations supplémentaires dans le Les chaînes 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. 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é
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)
}
Sortie mise à jour
Unquoted string,Cr@zy text with , and \ and " etc Quoted string,"Cr@zy text with , and \\ and \" etc"
Avec ce changement, la chaîne entre guillemets est désormais correctement échappée et les guillemets supplémentaires sont supprimés.
Clause de non-responsabilité: Toutes les ressources fournies proviennent en partie d'Internet. En cas de violation de vos droits d'auteur ou d'autres droits et intérêts, veuillez expliquer les raisons détaillées et fournir une preuve du droit d'auteur ou des droits et intérêts, puis l'envoyer à l'adresse e-mail : [email protected]. Nous nous en occuperons pour vous dans les plus brefs délais.
Copyright© 2022 湘ICP备2022001581号-3