[go] CSV 파일의 인코딩 변환

CSV(Comma Separated Values) 파일은 일반적으로 데이터를 저장하고 전송하기 위해 사용되는 형식입니다. 하지만 때때로 CSV 파일을 열 때 인코딩 문제가 발생할 수 있습니다. 이 때는 인코딩을 변환해야 합니다. 이번 블로그에서는 Go 언어로 CSV 파일의 인코딩을 변환하는 방법에 대해 알아보겠습니다.

CSV 파일 읽기

우선, CSV 파일을 읽기 위해 encoding/csv 패키지를 사용할 수 있습니다. 아래의 예제 코드는 utf-8로 인코딩된 CSV 파일을 읽는 방법을 보여줍니다.

package main

import (
	"encoding/csv"
	"fmt"
	"os"
)

func main() {
	file, err := os.Open("data.csv")
	if err != nil {
		fmt.Println("Error:", err)
		return
	}
	defer file.Close()

	reader := csv.NewReader(file)
	reader.Read()
}

CSV 파일의 인코딩 변환

CSV 파일의 인코딩을 변환하기 위해서는 일단 파일을 읽어들인 뒤 원하는 인코딩으로 변환하여 다시 저장해야 합니다. 이때 golang.org/x/text/encoding 패키지를 사용할 수 있습니다.

package main

import (
	"encoding/csv"
	"fmt"
	"os"
	"golang.org/x/text/encoding/charmap"
	"golang.org/x/text/transform"
)

func main() {
	file, err := os.Open("data.csv")
	if err != nil {
		fmt.Println("Error:", err)
		return
	}
	defer file.Close()

	// 문자 인코딩 변환
	reader := csv.NewReader(transform.NewReader(file, charmap.Windows1252.NewDecoder()))
	records, err := reader.ReadAll()
	if err != nil {
		fmt.Println("Error:", err)
		return
	}
	fmt.Println(records)
}

위의 예제 코드에서 charmap.Windows1252.NewDecoder()를 사용하여 Windows-1252에서 UTF-8로의 문자 인코딩 변환이 이루어집니다.

인코딩 변환 후에는 새로운 CSV 파일로 데이터를 다시 쓸 수 있습니다.

file, err := os.Create("output.csv")
if err != nil {
	fmt.Println("Error:", err)
	return
}
defer file.Close()

writer := csv.NewWriter(transform.NewWriter(file, charmap.Windows1252.NewEncoder()))
writer.WriteAll(records)
writer.Flush()

이제 CSV 파일의 데이터를 원하는 인코딩으로 변환하는 방법에 대해 알아보았습니다. 이를 활용하여 인코딩 문제를 해결할 수 있을 것입니다.