Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
String go编码/CSV中带引号字符串的奇怪CSV结果_String_Csv_Escaping_Go - Fatal编程技术网

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