为什么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
中设置错误和失败位?
答案 0 :(得分: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-8和char
进行存储。