如何将c++中utf-16编码的字符串(wstring)转为utf-8(string)?

如何将c++中utf-16编码的字符串(wstring)转为utf-8(string)?_第1张图片
最近使用到了mysql-connector-cpp,通过这个库获取到的字符串类型是mysql::string,其实其实质就是mysql自己实现的wstring。
如果直接进行转换:

mysqlx::string s2 = i2.get(0);
string s = s(s2);

这样的话,在s的最后会多出来一个‘\u0000’。
在这里插入图片描述
所以我们必须先将utf-16的字符串转化为utf-8的字符串。

std::wstring_convert这个类可以实现这个功能

template< class Codecvt,
class Elem = wchar_t,
class Wide_alloc = std::allocator,
class Byte_alloc = std::allocator >

Codecvt参数:

如何将c++中utf-16编码的字符串(wstring)转为utf-8(string)?_第2张图片

Elem:和codecvt中的Elem一致。
常用互换函数:
std::u16string to_utf16( std::string str ) // utf-8 to utf16
{ return std::wstring_convert< std::codecvt_utf8_utf16<char16_t>, char16_t >{}.from_bytes(str); }
 
std::string to_utf8( std::u16string str16 )
{ return std::wstring_convert< std::codecvt_utf8_utf16<char16_t>, char16_t >{}.to_bytes(str16); }
 
std::u32string to_utf32( std::string str )
{ return std::wstring_convert< std::codecvt_utf8<char32_t>, char32_t >{}.from_bytes(str); }
 
std::string to_utf8( std::u32string str32 )
{ return std::wstring_convert< std::codecvt_utf8<char32_t>, char32_t >{}.to_bytes(str32); }
 
std::wstring to_wchar_t( std::string str )
{ return std::wstring_convert< std::codecvt_utf8<wchar_t>, wchar_t >{}.from_bytes(str); }
 
std::string to_utf8( std::wstring wstr )
{ return std::wstring_convert< std::codecvt_utf8<wchar_t>, wchar_t >{}.to_bytes(wstr); }

参考资料:https://zh.cppreference.com/w/cpp/locale/wstring_convert

你可能感兴趣的:(遇到的问题s)