1 | FILE *fp = fopen("input.txt", "r, ccs=UTF-8"); | cs |
을 사용해서 file을 읽으면 UTF-8로 읽을 수 있다는 얘기가 막막 있는데 사실 안되더라...
하루 종일 검색해서 나온 결과는
MinGW 에서는 표준 C 함수를 윈도우에서 제공하는 라이브러리에 있는걸로 씁니다. (아마도 msvcrt.dll)
그런데 이 라이브러리가 좀 오래된거라서 표준을 제대로 지원하지 않습니다. 대표적인 문제로 printf에서 64비트 정수를 출력하기 위해서 %lld 대신에 %I64d 를 써야 되죠..
msdn가서 보니까 fopen함수에서 ccs는 visual c++ 2005, 2008에서만 지원하고 2003 이전은 지원 안하네요.
(http://msdn.microsoft.com/en-us/library/yeby3zcb.aspx)
따라서 윈도우에 기본적으로 들어가있는 라이브러리도 ccs를 지원 안할겁니다.이런경우라면 윈도우는 이른바 ANSI 인코딩을 사용합니다.
이게 뭐냐면 제어판에 보면 유니코드를 지원하지 않는 응용프로그램을 위한 언어설정이 있는데
이걸 한국어로 하면 ANSI 인코딩은 codepage 949가 되고
이게 English(US)면 ANSI 인코딩은 codepage 437이 됩니다.결론은 윈도우에서는 fopen에서 ccs=UTF-8을 무시하고 입력파일을 cp949로 간주해서 처리를 한것으로 보입니다.
제대로 설정을 했다고 해도 잘 못읽는 다는 것.
1 | FILE *fp = _wfopen(pWszFileName, pWszMode); | cs |
_wfopen으로 읽어서 처리할것
'C++' 카테고리의 다른 글
RxCpp 적용시 value_type_t 을 찾을수 수 없다고 나올때 (0) | 2016.04.29 |
---|---|
미정의 행동(Undefined behavior) (0) | 2016.04.25 |
Command Pattern(커맨드 패턴) (0) | 2016.03.17 |
상속받은 클래스 이름 출력하기 (0) | 2016.03.17 |
LNK2001 외부 기호를 확인할 수 없습니다. (virtual 함수 사용) (0) | 2016.03.16 |