«Если рабочий хочет хорошо выполнять свою работу, он должен сначала заточить свои инструменты» — Конфуций, «Аналитики Конфуция. Лу Лингун»
титульная страница > программирование > Почему мой код Go создает дополнительные кавычки при записи строк в кавычках в файл CSV с использованием `encoding/csv`?

Почему мой код Go создает дополнительные кавычки при записи строк в кавычках в файл CSV с использованием `encoding/csv`?

Опубликовано 12 ноября 2024 г.
Просматривать:643

Why does my Go code produce extra quotes when writing quoted strings to a CSV file using `encoding/csv`?

Странные результаты CSV для строк в кавычках с использованием Go Encoding/CSV

В этом фрагменте кода цель состоит в том, чтобы записать данные в файл 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