C# 텍스트 파일을 읽을 때 한글이 깨지는 현상과 파일의 인코딩 알아내기.
페이지 정보
본문
안녕하세요. 소심비형입니다. 보통 파일을 생성할 때 UTF-8 인코딩을 사용합니다. 하지만, 윈도우의 메모장(Notepad)은 ANSI를 사용하고 있습니다. 영문, 숫자는 문제되지 않지만 한글의 경우 인코딩 문제로 파일을 읽어들일 때 깨지는 현상이 있습니다.
string[] lines = File.ReadAllLines(fileName);
한글 문제를 해결하려면 명시적으로 인코딩을 지정해주어야 합니다.
string[] lines = File.ReadAllLines(fileName, Encoding.Default);
하지만, 이렇게 인코딩을 명시적으로 지정해도 글자가 깨지는 경우가 있는데요. 이 때는 파일의 인코딩을 읽어서 동일한 인코딩으로 설정해주면 문제를 해결할 수 있습니다.
public static Encoding GetEncoding(string filename)
{
// Read the BOM(Byte Order Mark)
var bom = new byte[4];
using (var file = new FileStream(filename, FileMode.Open, FileAccess.Read))
{
file.Read(bom, 0, 4);
}
// Analyze the BOM
if (bom[0] == 0x2b && bom[1] == 0x2f && bom[2] == 0x76)
return Encoding.UTF7;
if (bom[0] == 0xef && bom[1] == 0xbb && bom[2] == 0xbf)
return Encoding.UTF8;
if (bom[0] == 0xff && bom[1] == 0xfe)
return Encoding.Unicode; //UTF-16LE
if (bom[0] == 0xfe && bom[1] == 0xff)
return Encoding.BigEndianUnicode; //UTF-16BE
if (bom[0] == 0 && bom[1] == 0 && bom[2] == 0xfe && bom[3] == 0xff)
return Encoding.UTF32;
return Encoding.Default;
}
이 함수를 유틸리티 클래스에 추가하고, 사용하면 됩니다. 아래처럼요~
string[] lines = File.ReadAllLines(fileName, Util.GetEncoding(fileName));
추천0 비추천0
- 이전글서버에서 정보를 가져오는 중에 오류가 발생했습니다. [RH-1] 20.09.13
- 다음글HTTP란? 20.09.12
댓글목록
등록된 댓글이 없습니다.