2013-03-15 2 views
7

유니 코드로 작성된 콘솔 응용 프로그램 (C++ 및 Visual Studio 2008 사용)에서이 간단한 출력을 수행하고 있습니다. 이 코드는 Windows에서 실행됩니다.콘솔 응용 프로그램에서 유니 코드 문자가있는 _tprintf

_tprintf(L"Some sample string\n"); 

모든 것이 잘 작동합니다. 내가 거기에 비 ASCII 문자를 추가한다면 :

일부 샘플

내가 무슨 일을하고있는 중이 야 :

콘솔에 출력을 얻는 것을
_tprintf(L"Some sample € string\n"); 

는 그 문자까지 모든입니다 이리?

+2

콘솔이 해당 문자를 표시 할 수 없기 때문입니다. 유니 코드에서 8 비트 코드 페이지로의 변환이 실패하고 문자열을 자릅니다. 콘솔의 기본 코드 페이지는 일반적으로 유럽의 새로운 통화를 채택하기 전에 설계된 기존 IBM PC 코드 페이지 인 437입니다. SetConsoleOutputCP() 문자가있는 다른 인코딩으로 콘솔을 전환해야합니다. –

+0

나는 그 호출 전에'SetConsoleOutputCP (1200);'호출을 시도했지만 아무 것도 변경되지 않았다. – ahmd0

+2

'_setmode (_fileno (stdout), _O_WTEXT);'시도해보십시오 – Cubbi

답변

7

기본적으로 Windows 콘솔은 넓은 문자를 처리하지 않습니다. 아마 그 기능을 사용하는 가장 간단한 방법은 _setmode를 호출하는 것입니다 :

_setmode(_fileno(stdout), _O_WTEXT); 

는, 예문 및 기타 사용 가능한 모드를 포함하는 요구에 대한 MSDN를 참조하십시오.

관련 문제