如何打印宽字符串?

时间:2014-02-25 12:36:52

标签: c++ character-encoding

Cyrillic小写字母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;

通过u8str成功打印了西里尔文小写字母a,但不是wstr

对于u8str,我已经确认其存储是使用这些字符的utf-8编码值初始化的(西里尔文小写字母a占用2个字节,值为D0 B0)。一切似乎都没问题。西里尔文得到了正确印刷。

对于wstr,我认为wchar_t数组中的每个wstr都使用执行宽字符集中字符编码的数值进行初始化。虽然我不完全理解execution wide-character set是什么,但我检查了存储在数组中的Cyrillic小写字母的值是0x430。无论如何,西里尔字母没有正确打印。 (其他字符都可以。)

我对wchar_t的东西都是新手,所以如果这个问题过于简单,我会道歉。我尝试使用宽字符串打印西里尔字母时出了什么问题?这是执行宽字符集中字母表示的问题(毕竟这个字符集是什么)?或者是关于错误使用iostream工具的问题?

1 个答案:

答案 0 :(得分:1)

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

  

程序不应该将cout上的输出操作与wcout上的输出操作(或stdout上的其他面向广泛的输出操作)混合:一旦对任一个执行了输出操作,标准输出流就会获得一个方向(窄或者只能通过在stdout上调用freopen来安全地更改。

所以只能使用其中一个。

相关问题