출력

2013-05-06 2 views
0

I 윈도우 콘솔에 UTF-8 문자를 인쇄하는 코드를 가지고,출력

SetConsoleOutputCP(65001); 
freopen(NULL, "w,ccs=UTF-8", stdout); 

wchar_t u16 = 0x00A9; 
unsigned char utf8_b[] = {0xc2, 0xa9, 0x0}; //same as using WideCharToMultibyte for u16 
printf("%s", utf8_b); //(1) 
wprintf(L"%c", u16); //(2) 

(1) '©'인 올바른 출력을 생성한다 (2)의 출력하면서 대체 문자 U + FFFD입니다. 나는 stdout (2)를 파일로 리디렉션하여 인코딩 변환에 문제가 있는지 확인했지만 utf8_b []와 동일한 바이트 시퀀스를 생성했습니다.

누구든지 내게 설명 할 수 있습니까? 이 문제가 Windows 문제입니까?

btw, 내 콘솔 글꼴은 이미 Consolas로 설정되어 있습니다.

편집 : (2)를 사용하기 전에 의견을 말합니다. 따라서 스트림 방향과 관련이 없습니다. Windows 코드 페이지 65001의 일부 구현 버그가 C 표준 IO에 영향을 줄 수있는 곳을 읽었습니다. 아무도 나를 위해 이것을 확인할 수 있습니까?

+0

['putwchar'] (http://www.cplusplus.com/reference/cwchar/putwchar/)은 어떨까요? – Kninnug

+0

@Kninnug 같은 결과 (2) =. = – hatsuyuki

+0

이것은 나에게 전혀 도움이되지 않습니다. VS 버전은 무엇입니까? –

답변

0

동일한 FILE 스트림에서 와이드 및 바이트 지향 출력을 혼합하면 정의되지 않은 동작이 호출됩니다. 대신 printf("%lc", u16);을 사용하거나 모든 바이트 지향 출력을 제거해야합니다.