String go编码/CSV中带引号字符串的奇怪CSV结果
我有一点点代码让我整个周末都很忙String go编码/CSV中带引号字符串的奇怪CSV结果,string,csv,escaping,go,String,Csv,Escaping,Go,我有一点点代码让我整个周末都很忙 package main import ( "encoding/csv" "fmt" "log" "os" ) func main() { f, err := os.Create("./test.csv") if err != nil { log.Fatal("Error: %s", err) } defer f.Close() w := csv.NewWriter(f
package main
import (
"encoding/csv"
"fmt"
"log"
"os"
)
func main() {
f, err := os.Create("./test.csv")
if err != nil {
log.Fatal("Error: %s", err)
}
defer f.Close()
w := csv.NewWriter(f)
var record []string
record = append(record, "Unquoted string")
s := "Cr@zy text with , and \\ and \" etc"
record = append(record, s)
fmt.Println(record)
w.Write(record)
record = make([]string, 0)
record = append(record, "Quoted string")
s = fmt.Sprintf("%q", s)
record = append(record, s)
fmt.Println(record)
w.Write(record)
w.Flush()
}
运行时,它会打印出来:
[Unquoted string Cr@zy text with , and \ and " etc]
[Quoted string "Cr@zy text with , and \\ and \" etc"]
第二个引用的文本正是我希望在CSV中看到的,但我得到的是:
Unquoted string,"Cr@zy text with , and \ and "" etc"
Quoted string,"""Cr@zy text with , and \\ and \"" etc"""
这些额外的引用是从哪里来的?我如何避免它们?
我已经尝试了很多方法,包括使用string.Quote等,但似乎找不到完美的解决方案。请提供帮助?这是将数据存储为CSV的标准的一部分。 出于解析原因,需要对双引号字符进行转义 字段中的(双)引号字符必须由两个(双)引号字符表示。 发件人: 您真的不必担心,因为CSV阅读器将取消双引号的转义 例子: 输出 下面是write函数的代码。
它是将数据存储为CSV的标准的一部分。 出于解析原因,需要对双引号字符进行转义 字段中的(双)引号字符必须由两个(双)引号字符表示。 发件人: 您真的不必担心,因为CSV阅读器将取消双引号的转义 例子: 输出 下面是write函数的代码。
s变量的值不是您认为的值 s变量的值不是您认为的值 我有一个csv文件,其中的行带有双引号字符串,如: 文本//*[@class=“price”]/span;正文 和csv读取器生成读取csv文件的错误。 有帮助的是:
reader := csv.NewReader(file)
reader.LazyQuotes = true
我有一个csv文件,其中包含一行双引号字符串,如: 文本//*[@class=“price”]/span;正文 和csv读取器生成读取csv文件的错误。 有帮助的是:
reader := csv.NewReader(file)
reader.LazyQuotes = true
我只想补充一点,现实生活中的CSV生产者/消费者似乎与RFC定义“标准CSV”的努力大相径庭。如果您想与特定的生产者/消费者(mysqldump/mysqlimport、Excel/LibreOffice/Google Docs等)交换数据,实际上,您应该使用您实际希望在应用程序中出现的任何类型的特殊内容(例如,“,”,=,é,世界, 单元格中的CR/LF、空字符串、SQL为NULL——你可能不必处理应用程序中的所有内容;我只是想尽可能多地抛出一些想法)。这就是为什么每当有同事说:“读取CSV太简单,无法使用库时,我都会感到害怕。这只是一个逗号分隔的字符串,毕竟“我要补充的是,现实生活中的CSV生产者/消费者似乎与RFC定义“标准CSV”的努力相差很大。如果你想与特定的生产者/消费者(mysqldump/mysqlimport、Excel/LibreOffice/googledocs等)交换数据,您应该使用您实际希望在应用程序中出现的任何类型的特殊内容(例如,“,”,=,é,世界, 单元格中的CR/LF,空字符串,SQL为NULL——你可能不必处理应用程序中的所有问题;我只是想尽可能多地抛出一些想法)。这就是为什么每当有同事说:“读取CSV太简单,无法使用库。毕竟,它只是一个逗号分隔的字符串”时,我会感到害怕的原因
reader := csv.NewReader(file)
reader.LazyQuotes = true