如何将 unicode 数字转换为 std::wstring?

问题描述 投票:0回答:1

有没有一种简单的方法可以将 Unicode 数字转换为

std::wstring
? 例如我想将 U+1E9E (=16785054) 转换为

c++ unicode type-conversion wstring
1个回答
1
投票

根据运行代码的平台,

std::wstring
的编码需要为 UTF-16(即 Windows)或 UTF-32(即大多数其他操作系统)。将代码点数字转换为这些格式中的任何一种都非常简单。

wchar_t
大小为 32 位、适合 UTF-32 的平台上,您可以将数字按原样转换为
wchar_t
,然后将其分配给您的
wstring
,例如:

std::wstring CodePointToString(unsigned int codepoint) {
    wchar_t ch = static_cast<wchar_t>(codepoint);
    return std::wstring(&ch, 1);
}

...

std::wstring str = CodePointToString(0x1E9E);

wchar_t
大小为 16 位(适合 UTF-16)的平台上,您必须使用一点数学知识根据其值将数字转换为 1 或 2
wchar_t
,然后分配结果就是你的
wstring
,例如:

std::wstring CodePointToString(unsigned int codepoint) {
    std::wstring str;
    if (codepoint <= 0xFFFF) {
        str = static_cast<wchar_t>(codepoint);
    }
    else {
        codepoint -= 0x10000;
        str.resize(2);
        str[0] = static_cast<wchar_t>(0xD800 + ((the_number >> 10) & 0x3FF));
        str[1] = static_cast<wchar_t>(0xDC00 + (the_number & 0x3FF));
    }
    return str;
}

...

std::wstring str = CodePointToString(0x1E9E);

仅供参考,U+1E9E 不是 16785054,而是 7838。16785054 将是 U+1001E9E,这不是有效的代码点。

© www.soinside.com 2019 - 2024. All rights reserved.