猿问

为什么 golang bytes.Buffer 会有这样的行为?

我最近遇到一个问题,我正在byte.Buffer使用writer. 但是当我String()这样做时byte.Buffer,我得到了意外的输出(添加了额外的双引号对)。你能帮我理解一下吗?


这是我的问题的代码片段!我只需要帮助理解为什么每个单词都用双引号引起来。


func main() {

    var csvBuffer bytes.Buffer

    wr := csv.NewWriter(&csvBuffer)

    data := []string{`{"agent":"python-requests/2.19.1","api":"/packing-slip/7123"}`}

    err := wr.Write(data)

    if err != nil {

        fmt.Println("WARNING: unable to write ", err)

    }

    wr.Flush()

    fmt.Println(csvBuffer.String())

}

输出:


{""agent"":""python-requests/2.19.1"",""api"":""/packing-slip/7123""}


慕无忌1623718
浏览 95回答 1
1回答

繁星点点滴滴

在 CSV 中,双引号 ( ") 转义为 2 个双引号。这就是你所看到的。string您对包含双引号的单个值进行编码,因此所有这些都将替换为 2 个双引号。解码时,结果当然会包含 1 个双引号:r := csv.NewReader(&csvBuffer)rec, err := r.Read()fmt.Println(rec, err)输出(在Go Playground上尝试):[{"agent":"python-requests/2.19.1","api":"/packing-slip/7e0a05b3"}] <nil>引用以下的包文档encoding/csv:在带引号的字段中,引号字符后跟第二个引号字符被视为单引号。"the ""word"" is true","a ""quoted-field"""结果是{`the "word" is true`, `a "quoted-field"`}在 CSV 中,以下内容是等效的:one,two和"one","two"现在,如果值包含双引号,则表明该值结束。CSV 通过用 2 个双引号替换双引号来处理此问题。该值以 CSVone"1形式编码one""1,例如:"one""1","two""2"
随时随地看视频慕课网APP

相关分类

Go
我要回答