C#/WPF

[WPF] 한글 Encoding ANSI / UTF8

HJ0216 2024. 4. 22. 22:13
 

대용량 데이터처리시 발생되는 UI Freeze 문제 해결 part1

과거의 경험한 내용 중에 대용량의 데이터를 파일이서 잃거나, Rest API를 통해서 전달 받아서, DataGrid나 ListBox에 출력시 UI Freeze 현상과 메모리 사용량이 증가하는 한다는 것을 해결해보려고 노력

kaki104.tistory.com

프로젝트를 하다가 대용량 데이터를 다운로드할 때, 가끔 UI가 멈추는 현상이 발생했습니다.

 

마침 이와 관련해서 연습해보면 좋은 글이 있어 실습을 진행하는데, 문제가 코드가 아닌 파일에서 발생했습니다.

 

글에서는 영어로 된 데이터를 사용하지만, 저는 마침 한글로 된 대용량 파일이 있어 사용을 했던 게 문제가 되었습니다.

 

인코딩이 제대로 되지 않아 한글이 나오지 않는 문제였습니다.

 

간단하게 파일 인코딩 형식 변환과 지정하는 방법을 다루고자 합니다.

 

 

* 파일 인코딩 변환방식 변경

1. .csv 파일을 메모장으로 열기

2. 다른 이름으로 저장에서 ANSI → UTF8로 Encoding 방식 변경

 

* C#코드에서 Encoding 타입 명시

1
2
3
4
5
6
7
8
9
10
11
12
13
14
using(var reader = new StreamReader(fileName, Encoding.UTF8))
{
    while (!reader.EndOfStream)
    {
        string line = reader.ReadLine();
        if(line != null)
        {
            DataModel model = GetDataModel(line);
            returnDatas.Add(model);
        }
    }
 
    reader.Close();
}

⭐ 중요한 점은 Encoding.Default를 사용할 경우, ANSI가 적용되어 한글이 깨져서 나옵니다.

UTF8을 직접 명시해줘야 합니다.

 

 

ANSI와 UTF8 차이

* ANSI

  * American National Standards Institute

  * 주로 영어 알파벳을 위한 ASCII 코드에 몇몇 추가 문자를 포함하는 인코딩 방식들

* UTF8

  * 8-bit Unicode Transformation Format

  * 유니코드를 사용하여 전 세계의 모든 문자를 포함할 수 있는 인코딩 방식

 

⭐ ANSI는 특정 지역의 문자 집합에 제한되어 있는 반면, UTF-8은 전 세계의 모든 문자를 지원