Golang 에서 csv로 내보낸 파일에서 한글 깨짐 해결
September 23, 2023
BOM
Excel은 UTF-8 인코딩된 CSV 파일을 올바르게 읽기 위해 파일의 문서 앞에 BOM이 필요하다.
BOM: 바이트 순서 표시(Byte Order Mark, BOM)는 유니코드 문자 U+FEFF byte order mark로, 매직 넘버로서 문서의 가장 앞에 추가하여 텍스트를 읽는 프로그램에 여러 정보를 전달할 수 있다
In Code
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)
}
}
}