Mengapa kod Go saya menghasilkan petikan tambahan apabila menulis rentetan petikan pada fail CSV menggunakan `pengekodan/csv`?

Mary-Kate Olsen
Lepaskan: 2024-10-26 20:17:29
asal
709 orang telah melayarinya

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

Hasil CSV Pelik untuk Rentetan Dipetik Menggunakan Pengekodan/CSV Go

Dalam coretan kod ini, matlamatnya adalah untuk menulis data ke dalam fail CSV, memastikan rentetan yang dipetik dalam data dilepaskan dengan betul. Walau bagaimanapun, CSV yang terhasil mengandungi petikan tambahan, yang membawa kepada ketidakkonsistenan.

<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>
Salin selepas log masuk

Output yang dijangkakan untuk rentetan yang dipetik ialah:

[Unquoted string Cr@zy text with , and \ and " etc]
[Quoted string "Cr@zy text with , and \ and \" etc"]
Salin selepas log masuk

Walau bagaimanapun, output sebenar mengandungi petikan tambahan:

Unquoted string,"Cr@zy text with , and \ and "" etc"
Quoted string,"""Cr@zy text with , and \ and \"" etc"""
Salin selepas log masuk

Penyelesaian

Kod tidak perlu risau tentang melepaskan petikan berganda kerana pembaca CSV melepaskannya secara automatik. Oleh itu, penyelesaiannya adalah untuk mengalih keluar petikan berganda tambahan semasa menulis rentetan yang dipetik.

Kod Diubahsuai

Output Dikemas Kini

Dengan perubahan ini, rentetan petikan kini dilupuskan dengan betul dan petikan tambahan dialih keluar.
<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>
Salin selepas log masuk

Atas ialah kandungan terperinci Mengapa kod Go saya menghasilkan petikan tambahan apabila menulis rentetan petikan pada fail CSV menggunakan `pengekodan/csv`?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!