.Net Core CSV읽을 때 한글 깨짐 해결 방안

chanykim·2023년 1월 17일
0

csv 파일 인코딩 문제인 줄 알고 엑셀 인코딩 다시해서 저장해보고 StreamReader(stream, Encoding.Default)에서 Encoding.Default도 넣어보고 System.Text.Encoding.GetEncoding(949)) 로 해봤는데 오류가 뜨면서 되지 않았습니다.

위의 방법은 Net Framework에서 지원되는 방법이고 .Net Core는 조금 달랐습니다.
.Net Core는 기본적으로 한글을 지원 안 하기 때문에 아래와같은 코드를 넣어줘야 합니다.

Encoding.RegisterProvider(CodePagesEncodingProvider.Instance);

RegisterProvider메서드를 사용 하면 EncodingProvider 문자 인코딩을 지원 하지 않는 플랫폼에서 사용할 수 있도록에서 파생 된 클래스를 등록할 수 있습니다.

간단한 버튼을 만들고 아래와 같이 만들었을 때 csv파일에 적힌 한글이 제대로 출력됨을 확인할 수 있습니다.

 private void button1_Click(object sender, EventArgs e)
 {
    //path = ..\\*.csv
 	using (FileStream stream = new FileStream(path, FileMode.Open, FileAccess.Read, FileShare.ReadWrite))
    {
    	var endcoingCodePage = 51949;
        Encoding.RegisterProvider(CodePagesEncodingProvider.Instance);
        System.Text.Encoding euckr = System.Text.Encoding.GetEncoding(endcoingCodePage);
        StreamReader streamReader = new StreamReader(stream, euckr);

		while (!streamReader.EndOfStream)
        {
        	string line = streamReader.ReadLine();
            string[] data = line.Split(",");
            foreach (var item in data)
            {
            	Console.WriteLine(item);
            }
        }
    }
}

참고
https://learn.microsoft.com/ko-kr/dotnet/api/system.text.encoding?redirectedfrom=MSDN&view=net-7.0
https://learn.microsoft.com/ko-kr/dotnet/api/system.text.encoding.registerprovider?view=net-7.0#system-text-encoding-registerprovider(system-text-encodingprovider)
https://learn.microsoft.com/ko-kr/dotnet/api/system.text.codepagesencodingprovider?view=net-6.0

profile
오늘보다 더 나은 내일

0개의 댓글