In diesem Codeausschnitt besteht das Ziel darin, Daten in eine CSV-Datei zu schreiben, um 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.
<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>
Die erwartete Ausgabe für die Zeichenfolge in Anführungszeichen lautet:
[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"""
Verstehen der zusätzlichen Anführungszeichen
Die zusätzlichen Anführungszeichen in der Zeichenfolge mit Anführungszeichen sind ein Ergebnis der Befolgung des CSV-Standards, der erfordert, dass doppelte Anführungszeichen als zwei doppelte Anführungszeichen maskiert werden Zitate. 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 keine Gedanken über das Escapezeichen von doppelten Anführungszeichen machen, 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
<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>
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.
Das obige ist der detaillierte Inhalt vonWarum erzeugt mein Go-Code zusätzliche Anführungszeichen, wenn ich Zeichenfolgen in Anführungszeichen mit „encoding/csv' in eine CSV-Datei schreibe?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!