NGMsoftware

NGMsoftware
로그인 회원가입
  • 매뉴얼
  • 학습
  • 매뉴얼

    학습


    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

    댓글목록

    등록된 댓글이 없습니다.