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