gpt4 book ai didi

c++11 - 如何使用 wstring_convert 在 utf16 和 utf32 之间进行转换?

转载 作者:行者123 更新时间:2023-12-05 07:10:27 24 4
gpt4 key购买 nike

当您从 std::u16string 转到时,假设 std::u32stringstd::wstring_convert 不起作用正如它所期望的那样 chars。那么如何使用 std::wstring_convertstd::u16string 作为输入在 UTF-16 和 UTF-32 之间转换呢?

例如:

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 已被弃用,但在标准提供替代方案之前,它必须这样做。

最佳答案

如果您不想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 弃用。

关于c++11 - 如何使用 wstring_convert 在 utf16 和 utf32 之间进行转换?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61238606/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com