Heim  >  Artikel  >  Backend-Entwicklung  >  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?

Mary-Kate Olsen
Mary-Kate OlsenOriginal
2024-10-26 20:17:29700Durchsuche

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 der Kodierung/CSV von Go

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!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn