본문 바로가기
C,C++/Error & Warning

C 및 C++ UTF-8 text file read/write 하는 법

by woohyeon 2021. 3. 28.
반응형

인코딩이 UTF-8 로 되어 있는 텍스트 파일을 read하거나 write하고 싶을 때 아래와 같은 추가 설정이 필요.

C의 경우(fread, fopen과 같은 C 계열 함수 사용시)

fopen 시 다음과 같이 3번째 인자를 추가해준다.

// read
fopen_s(&fp, "file3.txt", "rt+,ccs=UTF-8"); 

// write
fopen_s(&fp, "file3.txt", "wt+,ccs=UTF-8");

 

그리고 파일 관련 동작을 수행하기 전 적절한 위치에 다음과 같은 코드를 추가한다. (docs.microsoft.com/ko-kr/cpp/c-runtime-library/reference/setlocale-wsetlocale?view=msvc-160)

// 아래 세 가지 중 아무거나 하나 추가

setlocale(LC_ALL, "");
setlocale(LC_ALL, "ko-KR");
setlocale(LC_ALL, ".utf8");

그리고 당연히 char 대신 wchar_t를 사용해야 한다. 그리고 이에 맞는 함수들을 사용해야 한다. 예를 들어 fprintf가 아니라 fwprintf 처럼.. 

 

C++의 경우(wifstream과 같은 스트림 클래스 사용 시)

아래와 같은 코드를 추가한다.

std::locale::global(std::locale(".UTF-8"));

wstring, wcout과 같은 wide 타입 버젼의 타입 및 함수를 사용해야함.




댓글