Почему golang bytes. Buffer ведет себя таким образом? - PullRequest
0 голосов
/ 30 октября 2019

Недавно я столкнулся с проблемой, когда я пишу на 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-запросы / 2.19.1 "", "api" ":" "/ Packaging-slip / 7123" "}

1 Ответ

4 голосов
/ 30 октября 2019

В 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"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...