2014-02-25 3 views
0

는 키릴 문자의 ISO-10646 코드 포인트 값은이 0x430이다 소문자, 그래서 나는 다음과 같은 시도 :넓은 문자열을 인쇄하는 방법은 무엇입니까?

char u8str[] = u8"Cyrillic lowercase a is: \u0430."; 
cout << u8str; 

키릴 소문자 a가 성공적으로 u8str를 통해 인쇄
wchar_t wstr[] = L"Cyrillic lowercase a is: \u0430."; 
wcout << wstr; 

있지만 wstr을 .

u8str에 대해서는 해당 문자가 utf-8 인코딩 값으로 초기화되었음을 확인했습니다. 키릴 문자 소문자 a는 2 바이트를 차지하며 값은 D0 B0입니다. 모두 괜찮아 보인다. 키릴 문자가 올바르게 인쇄되었습니다. wstr로서는

, 난 wstr 배열의 각 wchar_t가 실행 와이드 문자 세트의 문자의 부호화의 수치 값으로 초기화되는 것으로 가정한다. execution wide-character set이 무엇인지 완전히 이해하지는 못했지만 배열에 저장된 키릴 문자 소문자 a의 값은 0x430입니다. 어쨌든, 키릴 문자는 올바르게 인쇄되지 않습니다. (다른 문자는 모두 OK입니다.)

나는이 질문이 너무 초보적인 경우 사과 wchar_t 거시기를위한 총 초보자입니다. 와일드 문자 문자열을 사용하여 키릴 문자를 인쇄하는 시도가 잘못 되었습니까? 실행중인 와이드 문자 집합 (이 문자 집합은 결국 무엇입니까?)에서 문자 표현의 문제입니까? 아니면 iostream 기능의 잘못된 사용에 관한 문제입니까? 가입일

답변

1

: http://www.cplusplus.com/reference/iostream/cout/

프로그램 (표준 출력 다른 넓은 지향 출력 작업 또는) wcout에 출력 조작과 COUT에 출력 작업을 혼합하지 않아야 출력 동작 중 하나에서 수행되면 표준 출력 스트림은 stdout에서 freopen을 호출하여 안전하게 변경 될 수있는 방향 (좁은 또는 넓은)을 가져옵니다.

두 가지 중 하나만 사용하십시오.

+0

실제로 두 사례를 따로 실행했습니다. 그들은 단지 편의를 위해 질문에 함께 넣어졌습니다. 죄송합니다. – goodbyeera

+0

응용 프로그램에 유니 코드를 사용하도록 설정해야합니다. MSVC의 경우 _setmode (_fileno (stdout), _O_U16TEXT)를 사용할 수 있습니다. 당신의 메인이 시작될 때. 그러나 mingw의 경우 이것은 좀 더 어렵습니다. 여기를 참조하십시오 : http://sourceforge.net/apps/trac/mingw-w64/wiki/Unicode%20apps – Eejin

+0

iostream 기능에 더 많은 문제가 있다는 것을 의미합니까? 그러나 그리스 문자의 실행 넓은 문자 집합 표현이 아닌가? – goodbyeera

관련 문제