最近使用到了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参数:
Elem:和codecvt中的Elem一致。
常用互换函数:
std::u16string to_utf16( std::string str )
{ 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
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)