Go의 인코딩/csv 패키지는 인용 문자열 처리와 관련하여 많은 논쟁의 대상이 되어 왔습니다. CSV 파일로. 이 기사는 사용자가 CSV 파일에 인용 문자열을 작성하는 동안 추가 인용문을 발견한 흥미로운 현상을 탐색하여 문제를 조명하는 것을 목표로 합니다.
사용자가 제공한 내용 문제를 설명하는 다음 코드 조각:
<code class="go">package main import ( "encoding/csv" "fmt" "os" ) func main() { // Create a file to write CSV data f, err := os.Create("./test.csv") if err != nil { log.Fatal("Error: %s", err) } defer f.Close() // Initialize a CSV writer w := csv.NewWriter(f) // Unquoted string 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) // Quoted string record = make([]string, 0) record = append(record, "Quoted string") s = fmt.Sprintf("%q", s) record = append(record, s) fmt.Println(record) w.Write(record) // Flush the writer to save the changes w.Flush() }</code>
이 코드를 실행할 때 인용된 문자열에 대한 예상 출력은 다음과 같습니다.
[Quoted string "Cr@zy text with , and \ and \" etc"]
그러나 실제로 얻은 출력은 이전:
[Quoted string,"""Cr@zy text with , and \ and \"" etc"""]
인용된 문자열 주위에 추가 따옴표가 있다는 사실이 혼란스러워서 추가 조사가 필요했습니다.
문제의 근본 원인은 다음과 같습니다. CSV(쉼표로 구분된 값) 파일 형식 표준 자체입니다. 표준에 따르면 필드 내에서 사용되는 큰따옴표(")는 두 개의 큰따옴표("")로 표시되어야 합니다. 이는 구문 분석을 위해 문자를 이스케이프 처리하는 수단입니다.
A (double) quote character in a field must be represented by two (double) quote characters.
이 규칙 적용 대상 코드에서 사용자는 실제로 fmt.Sprintf("%q")를 사용하여 인용된 문자열 내의 따옴표를 올바르게 이스케이프했습니다. 그러나 인코딩/csv 패키지는 surrou
[Unquoted string Cr@zy text with , and `\` and " etc] [Quoted string `""""Cr@zy text with , and `\` and \"" etc""""`]
이를 추가합니다. 필드를 선택적으로 큰따옴표로 묶어야 하는 CSV 표준을 준수하려면 추가 이스케이프가 필요하며, 필드 내의 큰따옴표는 큰따옴표로 표시되어야 합니다.
CSV 인코딩 사양에 따라 추가 따옴표가 추가되지만 대체 인코딩 형식을 선택하면 이를 방지할 수 있습니다. 또는 CSV 표준을 엄격하게 따르려면 각 작은 큰 따옴표를 다음과 같이 바꾸어 문자열을 수동으로 조작할 수 있습니다. 다음과 같은 큰따옴표:
<code class="go">s = strings.ReplaceAll(s, `"`, `""`)</code>
Go의 인코딩/csv 패키지에서 CSV 파일에 인용된 문자열을 작성할 때 관찰된 특이한 동작은 CSV 표준 자체에 기인할 수 있습니다. 구문 분석을 위해 큰따옴표를 이스케이프해야 합니다. 이 기본 메커니즘을 이해하면 대체 인코딩 형식을 선택하거나 문자열 이스케이프를 수동으로 처리하여 원하는 결과를 얻을 수 있습니다.
위 내용은 Go\의 `encoding/csv` 패키지가 CSV 파일의 인용 문자열에 추가 따옴표를 추가하는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!