[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 패키지