string - 为什么golang bytes.Buffer会以这种方式运行?

标签 string csv go

我最近遇到了一个问题,我正在使用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”“}

最佳答案

在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 的doc文件:

在带引号的字段中,引号字符后跟第二个引号字符被视为单引号。
"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"

关于string - 为什么golang bytes.Buffer会以这种方式运行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58627100/

相关文章:

ios - 使用 UIImage : NSData is not nil, 进行 Base64 转换,但 UIImage 为 nil

javascript - 在 JavaScript 中从 chrome.storage.local 中删除以字符串开头的变量

java - 获取字符串中包含的所有出现的字符串

regex - 提取字符向量中两个特定单词之间的所有单词

python - 如何从 Pylons 应用返回 CSV?

python - Pandas read_csv 防止文件中的引号成为数据的一部分

csv - Azure 数据工厂 - CSV 中带引号的字符串在 SQL Server 接收器中不会被视为 NULL 值

javascript - 将 jQuery.ajax() 替换为 Go REST API 端点的 fetch() - 空负载

go - 创建在检查类型 Golang 时看起来像另一个的自定义类型

proxy - golang反向代理不工作