Go の `encoding/csv` パッケージを使用して CSV エンコードで引用符で囲まれた文字列をどのように処理しますか?

Mary-Kate Olsen
リリース: 2024-10-27 09:13:30
オリジナル
963 人が閲覧しました

How do you handle quoted strings in CSV encoding with Go's `encoding/csv` package?

Go での CSV エンコーディング: 引用符で囲まれた文字列の処理

Go のエンコーディング/csv パッケージでは、引用符で囲まれた文字列の処理により予期しない結果が生じる場合があります。 。 CSV レコードを記述する場合、二重引用符などの特殊文字をエンコードするための標準要件を理解することが重要です。

CSV 仕様に従って、フィールド内の二重引用符文字は 2 番目の二重引用符文字を使用してエスケープする必要があります。このエスケープ シーケンスは、解析上の理由から必要です。

例:

<code class="go">import "encoding/csv"

record := []string{
    "Unquoted string",
    "Cr@zy text with , and \ and \" etc",
}

writer := csv.NewWriter(writer)
writer.Write(record)</code>
ログイン後にコピー

上記のコードは、二重引用符がエスケープされた文字列を書き込みます:

<code class="csv">Unquoted string
"Cr@zy text with , and \ and \" etc"</code>
ログイン後にコピー

余分な引用符の回避:

CSV ファイルの読み取り時に余分な引用符の挿入を回避するには、次の手順を実行する必要があります:

  • 書き込み時引用符で囲まれた文字列の場合は、fmt.Sprintf("%q", string) を使用して二重引用符を適切にエスケープします。
  • 引用符で囲まれた文字列を読み取るとき、CSV リーダーは自動的に二重引用符のエスケープを解除し、元の文字列が取得されるようにします。 .

コード例:

<code class="go">func writeCSV() {
    writer := csv.NewWriter(writer)
    s := "Cr@zy text with , and \ and \" etc"

    record := []string{
        "Unquoted string",
        "Quoted string",
        fmt.Sprintf("%q", s),
    }

    writer.Write(record)
}

func readCSV() {
    reader := csv.NewReader(reader)
    records, err := reader.ReadAll()

    for _, record := range records {
        // Printed records automatically have double quotes unescaped by the CSV reader.
        fmt.Println(record)
    }
}</code>
ログイン後にコピー

出力:

[Unquoted string Cr@zy text with , and \ and " etc]
[Quoted string Cr@zy text with , and \ and " etc]
ログイン後にコピー

以上がGo の `encoding/csv` パッケージを使用して CSV エンコードで引用符で囲まれた文字列をどのように処理しますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!