3

当你要从std::u16stringto 时,可以说std::u32stringstd::wstring_convert不能按预期工作chars。那么如何使用作为输入std::wstring_convert在 UTF-16 和 UTF-32 之间进行转换呢?std::u16string

例如 :

inline std::u32string utf16_to_utf32(const std::u16string& s) {
    std::wstring_convert<std::codecvt_utf16<char32_t>, char32_t> conv;
    return conv.from_bytes(s); // cannot do this, expects 'char'
}

reinterpret_cast可以吗char,正如我在几个例子中看到的那样?

如果您确实需要reinterpret_cast,我已经看到了一些使用字符串大小而不是指针总字节大小的示例。这是错误还是要求?

我知道codecvt已弃用,但在标准提供替代方案之前,它必须这样做。

4

1 回答 1

0

如果您不想reinterpret_cast,我发现的唯一方法是先转换为 utf-8,然后再转换为 utf-32。

例如,

// Convert to utf-8.
std::u16string s;
std::wstring_convert<std::codecvt_utf8_utf16<char16_t>, char16_t> conv;
std::string utf8_str = conv.to_bytes(s);

// Convert to utf-32.
std::wstring_convert<std::codecvt_utf8<char32_t>, char32_t> conv;
std::u32string utf32_str = conv.from_bytes(utf8_str);

是的,这很可悲,可能会导致 codecvt 被弃用。

于 2021-12-22T21:11:33.947 回答