我最近遇到一个问题,我正在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"
- 1 回答
- 0 关注
- 97 浏览
添加回答
举报
0/150
提交
取消