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)
}
}
}