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

String 为什么golang bytes.Buffer会有这样的行为?,string,csv,go,String,Csv,Go,我最近遇到了一个问题,我正在使用编写器向字节.Buffer写入数据。但是当我在byte.Buffer上执行String()时,我得到了一个意外的输出(额外添加了一对双引号)。你能帮我理解吗 下面是我的问题的代码片段!我只是需要帮助理解为什么每个单词都有一个双引号 func main(){ var csvBuffer bytes.Buffer wr:=csv.NewWriter(&csvBuffer) 数据:=[]字符串{`{“代理”:“python请求/2.19.1”,“api”:“/装箱单/7

我最近遇到了一个问题,我正在使用
编写器
字节.Buffer
写入数据。但是当我在
byte.Buffer上执行
String()
时,我得到了一个意外的输出(额外添加了一对双引号)。你能帮我理解吗

下面是我的问题的代码片段!我只是需要帮助理解为什么每个单词都有一个双引号

func main(){
var csvBuffer bytes.Buffer
wr:=csv.NewWriter(&csvBuffer)
数据:=[]字符串{`{“代理”:“python请求/2.19.1”,“api”:“/装箱单/7123”}`}
错误:=wr.Write(数据)
如果错误!=零{
fmt.Println(“警告:无法写入”,错误)
}
wr.Flush()
fmt.Println(csvBuffer.String())
}
输出:

{“代理”:“python请求/2.19.1”、“api”:“/packing slip/7123”}

在CSV中,双引号(
)转义为2个双引号。这就是您看到的

您编码一个包含双引号的
字符串
值,因此所有这些值都将替换为两个双引号

解码后,结果将包含1个双引号,当然:

r := csv.NewReader(&csvBuffer)
rec, err := r.Read()
fmt.Println(rec, err)
输出(在屏幕上试用):

导致

{`the "word" is true`, `a "quoted-field"`}
在CSV中,以下内容是等效的:

one,two

现在,如果这些值包含双引号,则表示该值的结尾。CSV通过用其中的两个双引号替换来处理此问题。值
one“1
在CSV中编码为
one”1
,例如:

"one""1","two""2"

这是一个csv转义的东西,与字节无关。我相信是缓冲区。基本上,csv中相邻的两个双引号表示“现实”中的一个双引号。这在您正在使用的软件包的中进行了解释。真的!我也有同感。我只是觉得很难理解escape thing.csv是一个标准,如果您需要更多说明,请参阅(第2.7节)。感谢icza,这真的很有意义。感谢您通过一个示例帮助我理解它。
one,two
"one","two"
"one""1","two""2"