你如何使用wstring_convert在utf16和utf32之间进行转换?
How do you use wstring_convert to convert between utf16 and utf32?
当您从 std::u16string
转到 std::u32string
时,std::wstring_convert
没有像预期的那样工作 chars
。那么如何使用 std::wstring_convert
将 std::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 弃用。
当您从 std::u16string
转到 std::u32string
时,std::wstring_convert
没有像预期的那样工作 chars
。那么如何使用 std::wstring_convert
将 std::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 弃用。