我的代码基本上是这样的:
wstring japan = L"日本";
wstring message = L"Welcome! Japan is ";
message += japan;
wprintf(message.c_str());
我希望使用宽字符串,但我不知道它们是如何输出的,所以我使用了 wprintf。当我运行诸如以下内容时:
./widestr | hexdump
十六进制代码点创建如下:
65 57 63 6c 6d 6f 21 65 4a 20 70 61 6e 61 69 20 20 73 3f 3f
e W c l m o ! e J p a n a i s ? ?
为什么都是按顺序跳的?我的意思是,如果 wprintf 是错误的,我仍然不明白为什么它会以如此特定的混乱顺序输出!
编辑:字节顺序还是什么?他们似乎每两个角色旋转一次。呵呵。
编辑2:我尝试使用wcout,但它输出完全相同的十六进制代码点。诡异的!
您需要定义区域设置
#include <stdio.h>
#include <string>
#include <locale>
#include <iostream>
using namespace std;
int main()
{
std::locale::global(std::locale(""));
wstring japan = L"日本";
wstring message = L"Welcome! Japan is ";
message += japan;
wprintf(message.c_str());
wcout << message << endl;
}
按预期工作(即将宽字符串转换为窄 UTF-8 并打印)。
当您将全局区域设置定义为“”时,您设置了系统区域设置(如果它是 UTF-8,则会
打印为 UTF-8 - 即 wstring 将被转换)
Edit:忘记我所说的sync_with_stdio——这是不正确的,它们默认是同步的。不需要。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)