In diesem Codeausschnitt besteht das Ziel darin, Daten in eine CSV-Datei zu schreiben und sicherzustellen, dass Zeichenfolgen in Anführungszeichen enthalten sind Die Daten werden ordnungsgemäß maskiert. Die resultierende CSV-Datei enthält jedoch zusätzliche Anführungszeichen, was zu Inkonsistenzen führt.
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()
}
Die erwartete Ausgabe für die Zeichenfolge in Anführungszeichen ist:
[Unquoted string Cr@zy text with , and \ and " etc] [Quoted string "Cr@zy text with , and \\ and \" etc"]
Die tatsächliche Ausgabe enthält jedoch zusätzliche Anführungszeichen:
Unquoted string,"Cr@zy text with , and \ and "" etc" Quoted string,"""Cr@zy text with , and \\ and \"" etc"""
Die zusätzlichen Anführungszeichen verstehen
Die zusätzlichen Anführungszeichen in der Zeichenfolgen in Anführungszeichen sind ein Ergebnis der Befolgung des CSV-Standards, der erfordert, dass doppelte Anführungszeichen als zwei doppelte Anführungszeichen maskiert werden. Dies ist notwendig, um zwischen tatsächlichen doppelten Anführungszeichen in den Daten und solchen, die zur Datensatztrennung verwendet werden, zu unterscheiden.
Lösung
Der Code muss sich nicht darum kümmern, doppelte Anführungszeichen zu umgehen, weil Der CSV-Reader entfernt sie automatisch. Daher besteht die Lösung darin, die zusätzlichen doppelten Anführungszeichen beim Schreiben der Zeichenfolge in Anführungszeichen zu entfernen.
Geänderter Code
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)
}
Aktualisierte Ausgabe
Unquoted string,Cr@zy text with , and \ and " etc Quoted string,"Cr@zy text with , and \\ and \" etc"
Mit dieser Änderung wird die Zeichenfolge in Anführungszeichen jetzt ordnungsgemäß maskiert und die zusätzlichen Anführungszeichen werden entfernt.
Haftungsausschluss: Alle bereitgestellten Ressourcen stammen teilweise aus dem Internet. Wenn eine Verletzung Ihres Urheberrechts oder anderer Rechte und Interessen vorliegt, erläutern Sie bitte die detaillierten Gründe und legen Sie einen Nachweis des Urheberrechts oder Ihrer Rechte und Interessen vor und senden Sie ihn dann an die E-Mail-Adresse: [email protected] Wir werden die Angelegenheit so schnell wie möglich für Sie erledigen.
Copyright© 2022 湘ICP备2022001581号-3