-4

为什么L"&'v\x5\x17\x15-\x1dR\x14]Dv\x1991q-5Xp\x13\x172"类型容器中的值在输出时std::basic_string<wchar_t,std::char_traits<wchar_t>,std::allocator<wchar_t> >会产生设置错误位和失败位std::wcout

4

1 回答 1

0

不确定您的代码中到底发生了什么,但在 Windows 上,您必须使用特定于平台的函数来启用控制台中的 UTF-16 支持,因为它使用您的默认 ANSI 代码页,即 cp1251(参见http://www.siao2.com/ 2008/03/18/8306597.aspx)。这解决了坏位的问题:

#include <fcntl.h>
#include <io.h>

/*...*/
_setmode( _fileno(stdout), _O_U16TEXT );
/*...*/

您还必须为控制台选择正确的字体,否则某些字符会看起来像正方形。例如,您可能会选择 Lucida Console 或 Consolas,但如果您查看字符映射表,您会发现这些字体中没有中文字符,而且还有很多其他字符。如果您想将字体更改为不同的字体,请尝试执行此操作https://superuser.com/questions/5035/how-to-change-the-windows-xp-console-font但要小心(http://support.microsoft。 com/kb/247815)。

还要记住,类似 POSIX 的操作系统和 Windows 上的 Unicode 支持是不同的。Windows 使用存储在wchar_t类型中的 UTF-16 编码,而大多数 POSIX 操作系统使用 UTF-8char进行存储。

于 2013-07-12T10:59:17.123 回答