为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

Go
慕无忌1623718 2023-07-31 16:28:40
我最近遇到一个问题,我正在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""}
查看完整描述

1 回答

?
繁星点点滴滴

TA贡献1803条经验 获得超3个赞

在 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"


查看完整回答
反对 回复 2023-07-31
  • 1 回答
  • 0 关注
  • 97 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信