Mengapakah penulis CSV Go menambah petikan tambahan pada rentetan petikan yang mengandungi aksara khas?

Susan Sarandon
Lepaskan: 2024-10-25 09:30:02
asal
203 orang telah melayarinya

Why does Go's CSV writer add extra quotes to quoted strings containing special characters?

Pengekodan CSV Pelik bagi Rentetan Dipetik dalam Go

Coretan kod ini cuba mencipta fail CSV dengan dua rekod, satu dengan rentetan yang tidak dipetik dan satu lagi dengan petikan rentetan yang mengandungi aksara khas:

<code class="go">package main

import (
    "encoding/csv"
    "fmt"
    "log"
    "os"
)

func main() {
    f, err := os.Create("./test.csv")
    if err != nil {
        log.Fatal("Error: %s", err)
    }
    defer f.Close()

    w := csv.NewWriter(f)
    var record []string
    record = append(record, "Unquoted string")
    s := "Cr@zy text with , and \ and \" etc"
    record = append(record, s)
    fmt.Println(record)
    w.Write(record)

    record = make([]string, 0)
    record = append(record, "Quoted string")
    s = fmt.Sprintf("%q", s)
    record = append(record, s)
    fmt.Println(record)
    w.Write(record)

    w.Flush()
}</code>
Salin selepas log masuk

Walau bagaimanapun, output mengandungi petikan tambahan yang mengelilingi rentetan yang disebut:

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

Penjelasan

Tingkah laku ini adalah akibat daripada CSV standard. Mengikut spesifikasi, petikan berganda dalam medan mesti dilepaskan dengan petikan berganda. Oleh itu, penulis CSV secara automatik melepaskan petikan berganda dalam rentetan yang dipetik.

Penyelesaian

Pembaca CSV secara automatik melepaskan petikan berganda semasa menghuraikan, jadi anda tidak perlu risau tentang petikan tambahan . Rentetan yang dipetik akan ditafsirkan dengan betul sebagai:

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

Contoh

Berikut ialah versi kod yang diperbaik dengan escape yang tidak perlu dialih keluar:

package main

import (
    "encoding/csv"
    "fmt"
    "os"
)
func checkError(e error){
    if e != nil {
        panic(e)
    }
}
func writeCSV(){
    fmt.Println("Writing csv")
    f, err := os.Create("./test.csv")
    checkError(err)
    defer f.Close()

    w := csv.NewWriter(f)
    s := &quot;Cr@zy text with , and \ and \&quot; etc&quot;
    record := []string{ 
      "Unquoted string",
      s,
    }
    fmt.Println(record)
    w.Write(record)

    record = []string{ 
      "Quoted string",
      s,
    }
    fmt.Println(record)
    w.Write(record)
    w.Flush()
}
func readCSV(){
    fmt.Println("Reading csv")
    file, err := os.Open("./test.csv")
    defer file.Close();
    cr := csv.NewReader(file)
    records, err := cr.ReadAll()
    checkError(err)
    for _, record := range records {
        fmt.Println(record)
    }
}
func main() {
   writeCSV()
   readCSV()
}
Salin selepas log masuk

Output

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

Atas ialah kandungan terperinci Mengapakah penulis CSV Go menambah petikan tambahan pada rentetan petikan yang mengandungi aksara khas?. 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!