西里爾的ISO-10646代碼點值小寫a爲0x430,所以我嘗試以下:如何打印寬字符串?
char u8str[] = u8"Cyrillic lowercase a is: \u0430.";
cout << u8str;
和
wchar_t wstr[] = L"Cyrillic lowercase a is: \u0430.";
wcout << wstr;
的西里爾小寫一個被成功地通過u8str
打印,但不wstr
。
至於u8str
,我已經確認它的存儲是用那些字符的utf-8編碼值初始化的(西里爾小寫字母a佔用2個字節,值爲D0 B0
)。一切似乎都沒問題。西里爾文打印正確。
至於wstr
,我假設wstr
陣列中的每個wchar_t
與在執行寬字符集的字符的編碼的數值初始化。雖然我不完全理解execution wide-character set
是,我檢查了西裏爾字母小寫值存儲在陣列中是0x430
。無論如何,西裏爾字母不能正確打印。 (其他字符都OK。)
我是一個總新手wchar_t
的東西,所以我道歉,如果這個問題太簡單了。在嘗試使用寬字符串打印西裏爾字母時出了什麼問題?它是執行寬字符集中字母表示的問題(畢竟這是什麼字符集)?或者這是關於錯誤使用iostream設施的問題?
我居然跑這兩種情況分別。爲了方便起見,他們被整理在一起。對不起,這不明確。 – goodbyeera
那麼你需要爲你的應用程序啓用Unicode。 對於MSVC,你可以使用_setmode(_fileno(stdout),_O_U16TEXT);在你的主要開始。 但對於MinGW的,這是比較困難的,在這裏看到: http://sourceforge.net/apps/trac/mingw-w64/wiki/Unicode%20apps – Eejin
這是否意味着它是更大的問題上了iostream設施但不是希臘字母的執行寬字符集表示? – goodbyeera