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
Freigeben: 2024-10-26 20:17:29
Original
709 Leute haben es durchsucht

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>
Nach dem Login kopieren

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"]
Nach dem Login kopieren

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"""
Nach dem Login kopieren

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>
Nach dem Login kopieren

Aktualisierte Ausgabe

Unquoted string,Cr@zy text with , and \ and " etc
Quoted string,"Cr@zy text with , and \ and \" etc"
Nach dem Login kopieren

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!

Quelle:php.cn
Erklärung dieser Website
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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!