Golangでcsvとしてエクスポートしたファイルでの文字化け対策

Golangでcsvとしてエクスポートしたファイルでの文字化け対策

2023年9月23日

BOM

ExcelはUTF-8エンコードされたCSVファイルを正しく読み取るために、ファイルのドキュメント前にBOMが必要です。

BOM: バイト順序マーク(Byte Order Mark, BOM)は、ユニコード文字U+FEFFバイト順序マークで、マジックナンバーとして文書の最前に追加しテキストを読むプログラムへ様々な情報を提供することができます。

コード内

Golangでcsvを使用する場合、次のように文字化けを防ぐことができます。

package main

import (
    "encoding/csv"
    "os"
)

func main() {
    file, err := os.Create("test.csv")
    if err != nil {
        panic(err)
    }
    defer file.Close()

    // NOTE: UTF-8 BOM追加
    file.WriteString("\xEF\xBB\xBF")

    writer := csv.NewWriter(file)
    defer writer.Flush()

    data := [][]string{
        {"名前", "年齢", "住所"},
        {"홍길동", "30", "서울"},
        {"김영희", "25", "부산"},
    }

    for _, value := range data {
        err := writer.Write(value)
        if err != nil {
            panic(err)
        }
    }
}

参考