繁体   English   中英

C ++:宽字符输出不正确?

[英]C++: wide characters outputting incorrectly?

我的代码基本上是这样的:

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是错的,我仍然不明白为什么它会以这样一个特定的混乱顺序输出!

编辑:endianness还是什么? 他们似乎旋转每两个字符。 呵呵。

编辑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)

编辑:忘记我说的sync_with_stdio - 这是不正确的,它们默认是同步的。 不需要。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM