如何打印宽字符串
How to print wide character string?
西里尔字母小写字母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
。无论如何,西里尔字母没有正确打印出来。(其他字符都可以。)
我对wchar_t
的东西完全是个新手,所以如果这个问题太初级,我道歉。我尝试用宽字符串打印西里尔字母时出了什么问题?这是字母在执行范围字符集中的表示问题吗(毕竟这个字符集是什么)?还是iostream设施使用不当的问题?
来源:http://www.cplusplus.com/reference/iostream/cout/
程序不应将cout上的输出操作与wcout上的输出运算(或与stdout上的其他面向宽的输出运算)混合:一旦对其中一个执行了输出运算,标准输出流就会获得一个方向(窄或宽),该方向只能通过在stdout上调用freopen来安全地更改。
所以只使用两者中的一个。
相关文章:
- 有没有办法将字符串打印为文字?
- 如何通过标准字符串打印 ostream 变量的值?
- 这个随机字符串打印代码有什么问题?
- 比较 C++ 字符串打印中的两个整数数组
- 在C++中从后缀表达式字符串打印单个操作
- 没有得到 ASCII 编号 = 7 的字符串打印输出
- C++字符串到字符串打印不正确,无法获取 unicode 路径
- 如何从数组 c++ 中的字符串打印第 N 个字符
- 将 LPCWSTR 字符串打印到文件
- C++正在将DWORD_PTR*字符串打印到文件中
- 使用#define字符串打印f和警告
- 使用格式字符串打印类
- 如何将字符转换为字符串,并从字符串打印到main函数
- 将vector中结构体的成员字符串打印到cout流
- fprintf() / std::cout 不会将部分字符串打印到 stdout/stderr
- 为什么ostream为定义为' volatile char[] '的字符串打印' 1 ' ?
- c++文件读取和字符串打印
- 如何使用一个字符串打印此unicode行
- 按字符串打印日期
- 如何用c++将字符串打印到控制台