반응형
인코딩이 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 타입 버젼의 타입 및 함수를 사용해야함.
'C,C++ > Error & Warning' 카테고리의 다른 글
[C++] list iterators incompatible Error (0) | 2020.12.18 |
---|---|
스레드 함수의 인자로 shared_ptr을 전달할 때 주의할 점 | _Incref 에러 (0) | 2020.11.08 |
LNK 1104: cannot open file ~~~ for writing (0) | 2020.09.07 |
[C++] 함수 템플릿 특수화 관련 링크 에러 | LNK1169, LNK2005 (0) | 2020.03.02 |
[C++] LNK2001, LNK1120 링크 오류 (static 관련) (0) | 2020.02.04 |
댓글