В CSV двойные кавычки ("
) экранируются как 2 двойные кавычки. Вот что вы видите.
Вы кодируете одно значение string
, которое содержит двойные кавычки, поэтому все они заменяются двумя двойными кавычками.
При декодировании результат будет содержать 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
кодируется как one""1
в CSV, например:
"one""1","two""2"