我最近遇到了一个问题,我正在使用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”“}
答案 0 :(得分:4)
在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通过将双引号替换为其中的两个来处理此问题。值one"1
在CSV中被编码为one""1
,例如:
"one""1","two""2"