【发布时间】:2014-02-25 12:36:51
【问题描述】:
西里尔小写a的ISO-10646码位值为0x430,所以我尝试了以下:
char u8str[] = u8"Cyrillic lowercase a is: \u0430.";
cout << u8str;
和
wchar_t wstr[] = L"Cyrillic lowercase a is: \u0430.";
wcout << wstr;
西里尔字母小写a通过u8str成功打印,但不是wstr。
至于u8str,我已经确认它的存储是用这些字符的utf-8编码值初始化的(西里尔小写字母a占用2个字节,值为D0 B0)。一切似乎都很好。西里尔字母打印正确。
至于wstr,我假设wstr数组中的每一个wchar_t都是用执行宽字符集中字符的编码的数值来初始化的。虽然我不完全理解execution wide-character set 是什么,但我检查了存储在数组中的西里尔字母小写a 的值是0x430。无论如何,西里尔字母没有正确打印。 (其他字符都OK。)
我是wchar_t 的新手,所以如果这个问题太简单了,我很抱歉。我尝试使用宽字符串打印西里尔字母时出了什么问题?这是执行宽字符集中字母表示的问题(毕竟这个字符集是什么)?还是 iostream 设施使用不当的问题?
【问题讨论】: