2010-01-21 4 views
4

여기에서 최종 목표는 C++ 프로그램을 통해 Windows에서 콘솔에 비 라틴 텍스트 출력을 작성하는 것입니다.C++ 프로그램을 통해 PowerShell에서 유니 코드 문자 인쇄

cmd.exe는 아무데도 나옵니다. 그래서 최신의 반짝이는 PowerShell 버전 (유니 코드 지원)이 있습니다. 나는

  • 비 유니 코드 문자 타입과
  • 예를 들어, 내가 가진

("DIR"와 같은) 윈도우 명령에서 비 유니 코드 콘솔 출력을 볼 수 있다는 것을 확인했습니다 이 파일 "가 .txt 인"(가 한국 알파벳의 첫 글자이다) 나는 출력과 같이 얻을 수 있습니다 :

PS P:\reference\unicode> dir .\가.txt 

    Directory: P:\reference\unicode 

Mode    LastWriteTime  Length 
Name              
----    -------------  ------ 
----              
-a---   1/12/2010 8:54 AM   0 가.txt  

지금까지 너무 좋아. 그러나 C++ 프로그램을 사용하여 콘솔에 글쓰기가 작동하지 않습니다.

int main() 
{ 
    wchar_t text[] = {0xAC00, 0}; // 가 has code point U+AC00 in unicode 
    wprintf(L"%s", text); // this prints a single question mark: "?" 
} 

내가 무엇이 빠졌는지 모르겠다. 내가 입력 할 수 있고 콘솔에서가()를 볼 수 있다는 사실은 필자가 필요한 세 조각 (유니 코드 지원, 글꼴 및 글리프)을 가지고 있음을 나타내는 것으로 보이지만 오판되어야합니다.

나는 행운없이 "chcp"도 시도했다. 내 C++ 프로그램에서 뭔가 잘못하고 있니?

감사합니다. 의 printf 문서에서

+0

"PS> [char] 0xAC00"은 올바른 문자를 인쇄하는 것으로 나타났습니다. 그래서 내 응용 프로그램에서 실제로 뭔가 잘못하고 있어요 ... –

답변

7

: 스트림이 ANSI 모드로 열립니다 경우 동일

wprintf와 printf와 동작합니다.

체크 아웃이 blog post입니다. 이 짧은 짧은 목록이 있습니다.

#include <fcntl.h> 
#include <io.h> 
#include <stdio.h> 

int main(void) { 
    _setmode(_fileno(stdout), _O_U16TEXT); 
    wprintf(L"\x043a\x043e\x0448\x043a\x0430 \x65e5\x672c\x56fd\n"); 
    return 0; 
} 
+0

감사,이 많은 도움이되었다. _O_U16TEXT를 지정하면 cmd.exe에서 올바르게 작동하지만 PowerShell에서는 작동하지 않습니다. _O_U8TEXT가 Powershell에서 작동한다는 것을 발견 할 때까지 (하지만 UTF-16 텍스트로!) 머리카락을 찢어 내고있었습니다. Powershell의 버그로 인해 필자는 connect.microsoft.com에 버그를 제출했습니다. 아무도 그것을 읽는지 모르겠다. 좀 더 근본적으로 잘못된 것보다는 단순한 혼란이되기를 바랍니다. 다시 한 번,이 사실에 대한 당신의 통찰에 감사드립니다. –

+0

아주 좋습니다. 나는 마이클 카플란이 유니 코드의 모든 것들에 대한 첫 번째 중지라는 것을 잊고있다. – jveazey