이슈

 

 CRT 관련 함수들은 항상 문자를 현재의 코드페이지로 변환후에 WriteFile를 이용하여 출력하였습니다. 즉 유니코드를 지원하지 않았습니다. 유일한 방법은 WriteConsoleW를 이용하는 방법이었습니다.

 

 하지만 VS2005 부터는 wprintf와 wcout를 이용하여 콘솔창에 유니코드를 출력할 수 있습니다. 이 기능은 기본적으로 비활성화 되어 있으며 활성화 하기 위해서는 아래의 메소드를 호출해 주어야 합니다.

 

_setmode(_fileno(stdout), _O_U16TEXT);

 

 

 

실습

 

#include <Windows.h>
#include <tchar.h>
#include <iostream>
#include <fcntl.h>
#include <io.h>

 

using namespace std;

 

int _tmain(int argc, _TCHAR* argv[])

{

wchar_t unicode_string[512] = L"Welcome! 환영합니다! 歓迎(かんげい) いたします!";

 

// CRT

_setmode(_fileno(stdout), _O_U16TEXT);

wcout << unicode_string;
wcout << endl;

 

// WINAPI
DWORD dwWritten;

HANDLE output = GetStdHandle(STD_OUTPUT_HANDLE);
WriteConsoleW( output , unicode_string, (DWORD)::wcslen( unicode_string ), &dwWritten, NULL );

 

cin.get();

 

return 0;

}

 

 아래의 콘솔창을 보면 뒷부분의 일본어가 시작되는 부분의 한자가 한글자뿐이 보이지 않습니다. 출력을 기대한 글자는 歓迎(かんげい) いたします! 입니다. 이유는 콘솔의 기본 폰트는 모든 유니코드를 제공하지 않기 때문입니다. 다른 폰트로 변경을 해야 합니다.

 

 

 

 

 콘솔창의 속성에서 폰트를 변경해 줄수 있습니다. '굴림체'로 변경하니 모든 문자가 의도대로 보이는 것을 확인할 수 있습니다.

 

 

 

 

 

 


Posted by great-artist
,