C++ 如何将 Unicode wstring 显示为 Unicode 格式的数字

C++ How to display Unicode wstring as Number in Unicode format

我有一个 std::wstring 这样的:

std::wstring mystr = L"abc\U0000FFFF\U0000000A\U00000061\U00000010de";

我想将它打印到控制台,看起来应该是这样的:

abc\U0000FFFF\U0000000A\U00000061\U00000010de

当我尝试这个时:

for (int i = 0; i < 9; i++)
{
    char16_t* ctest = &c[i];
    std::cout << *ctest<< " ";
}

结果是

61 62 63 ffff a 61 10 64 65

如何获得我想要的输出?

只需在输出时检查每个字符。如果它在可打印的 ASCII 范围内,则将其输出为 char;否则将其输出为十六进制序列。

    std::wstring mystr = L"abc\U0000FFFF\U0000000A\U00000061\U00000010de";
    for (int i = 0;  i < mystr.size();  ++i)
    {
        if (mystr[i] >= 0x20 && mystr[i] < 0xff)
            cout << (char)mystr[i];
        else
            cout << "\U" << std::setfill('0') << std::right << std::setw(8) << std::hex << mystr[i];
    }

https://ideone.com/ucepKy

输出与您想要的输出不同,因为您有两次字符“a”,一次作为单个字符,一次作为十六进制转义序列。编译字符串后,无法区分两者。