„Wenn ein Arbeiter seine Arbeit gut machen will, muss er zuerst seine Werkzeuge schärfen.“ – Konfuzius, „Die Gespräche des Konfuzius. Lu Linggong“
Titelseite > Programmierung > Warum erzeugt mein Go-Code zusätzliche Anführungszeichen, wenn ich Zeichenfolgen in Anführungszeichen mit „encoding/csv“ in eine CSV-Datei schreibe?

Warum erzeugt mein Go-Code zusätzliche Anführungszeichen, wenn ich Zeichenfolgen in Anführungszeichen mit „encoding/csv“ in eine CSV-Datei schreibe?

Veröffentlicht am 12.11.2024
Durchsuche:243

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

Seltsame CSV-Ergebnisse für Zeichenfolgen in Anführungszeichen mit Go's Encoding/CSV

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.

Neuestes Tutorial Mehr>

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