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>
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"]
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"""
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>
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.
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!