[go] CSV 파일의 디코딩 처리
CSV 파일을 읽거나 쓸 때, 디코딩 처리를 해야 하는 경우가 있습니다. 특히, CSV 파일이 UTF-8 또는 다른 인코딩으로 되어 있을 때 발생할 수 있습니다. 이 글에서는 Go 언어에서 CSV 파일을 읽을 때 디코딩 처리를 하는 방법에 대해 알아보겠습니다.
파일 읽기
먼저, CSV 파일을 읽어오기 위해서 os
패키지를 사용하여 파일을 열고 읽어올 수 있습니다. 다음은 파일을 열고 bufio
패키지를 사용하여 한 줄씩 읽어오는 간단한 예제입니다.
package main
import (
"encoding/csv"
"fmt"
"os"
"io"
"bufio"
)
func main() {
file, err := os.Open("data.csv")
if err != nil {
fmt.Println("Error:", err)
return
}
r := csv.NewReader(bufio.NewReader(file))
for {
record, err := r.Read()
if err == io.EOF {
break
}
if err != nil {
fmt.Println("Error:", err)
return
}
fmt.Println(record)
}
}
디코딩 처리
만약 CSV 파일이 UTF-8이 아닌 다른 인코딩으로 되어 있다면, golang.org/x/text/encoding
패키지를 사용하여 디코딩 처리를 할 수 있습니다. 다음은 ISO-8859-1로 인코딩된 CSV 파일을 읽는 예제입니다.
package main
import (
"encoding/csv"
"fmt"
"os"
"io"
"bufio"
"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
}
reader := transform.NewReader(file, charmap.ISO8859_1.NewDecoder())
r := csv.NewReader(bufio.NewReader(reader))
for {
record, err := r.Read()
if err == io.EOF {
break
}
if err != nil {
fmt.Println("Error:", err)
return
}
fmt.Println(record)
}
}
이 예제에서는 golang.org/x/text/encoding/charmap
를 사용하여 ISO-8859-1 인코딩으로 된 CSV 파일을 UTF-8로 디코딩하였습니다.
결론
CSV 파일을 읽을 때 디코딩 처리를 해야 하는 경우, Go 언어의 golang.org/x/text/encoding
패키지를 사용하여 해당 인코딩으로 디코딩할 수 있습니다. 이를 통해 인코딩된 CSV 파일을 올바로 읽어올 수 있습니다.
관련 참고 자료: Go 언어의 encoding 패키지