В этом фрагменте кода цель состоит в том, чтобы записать данные в файл CSV, гарантируя, что строки в кавычках внутри данные правильно экранированы. Однако полученный CSV-файл содержит лишние кавычки, что приводит к несоответствиям.
package main
import (
"encoding/csv"
"fmt"
"log"
"os"
)
func main() {
f, err := os.Create("test.csv")
if err != nil {
log.Fatal(err)
}
defer f.Close()
w := csv.NewWriter(f)
record := []string{"Unquoted string", "Cr@zy text with , and \\ and \" etc"}
w.Write(record)
record = []string{"Quoted string", fmt.Sprintf("%q", "Cr@zy text with , and \\ and \" etc")}
w.Write(record)
w.Flush()
}
Ожидаемый результат для строки в кавычках:
[Unquoted string Cr@zy text with , and \ and " etc] [Quoted string "Cr@zy text with , and \\ and \" etc"]
Однако фактический вывод содержит дополнительные кавычки:
Unquoted string,"Cr@zy text with , and \ and "" etc" Quoted string,"""Cr@zy text with , and \\ and \"" etc"""
Что такое дополнительные кавычки
Дополнительные кавычки в Строка в кавычках является результатом следования стандарту CSV, который требует, чтобы двойные кавычки экранировались как две двойные кавычки. Это необходимо для того, чтобы различать фактические двойные кавычки в данных и те, которые используются для разделения записей.
Решение
В коде не нужно беспокоиться об экранировании двойных кавычек, потому что программа чтения CSV автоматически отменяет их экранирование. Поэтому решение состоит в том, чтобы удалить лишние двойные кавычки при написании строки в кавычках.
Модифицированный код
for _, record := range [][]string{
{"Unquoted string", "Cr@zy text with , and \\ and \" etc"},
{"Quoted string", "Cr@zy text with , and \\ and \" etc"},
} {
record[1] = fmt.Sprintf("%q", record[1][1:len(record[1])-1])
w.Write(record)
}
Обновленный вывод
Unquoted string,Cr@zy text with , and \ and " etc Quoted string,"Cr@zy text with , and \\ and \" etc"
Благодаря этому изменению строка в кавычках теперь корректно экранируется, а лишние кавычки удаляются.
Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.
Copyright© 2022 湘ICP备2022001581号-3