学习记录,便于查询
u8string, u16string, u32string 由 C++20 标准提供支持
学习自
https://blog.csdn.net/liangzhao_jay/article/details/78788766
头文件
#include <string>
// UTF8与UTF16互相转换
u8string conv_utf16_to_utf8(u16string s);
u16string conv_utf8_to_utf16(u8string s);
// UTF16与UTF32互相转换
u32string conv_utf16_to_utf32(u16string s);
u16string conv_utf32_to_utf16(u32string s);
// UTF8与UTF32互相转换
u8string conv_utf8_to_utf32(u32string s);
u32string conv_utf32_to_utf8(u8string s);
// 同类型不同类型名强制转换
// 如果明确知道string内容为UTF8字符集,使用该函数将其强制转换为u8string
u8string cast_u8string(string s);
string cast_string(u8string s);
// 如果明确知道wstring内容为UTF16字符集,使用该函数将其强制转换为wstring
u16string cast_u16string(wstring s);
wstring cast_wstring(u16string s);
函数定义
#include <string>
#include <boost/locale.hpp>
u8string conv_utf16_to_utf8(u16string s)
{
return boost::locale::conv::utf_to_utf<char8_t>(s.c_str());
}
u16string conv_utf8_to_utf16(u8string s)
{
return boost::locale::conv::utf_to_utf<char16_t>(s.c_str());
}
u32string conv_utf16_to_utf32(u16string s)
{
return boost::locale::conv::utf_to_utf<char32_t>(s.c_str());
}
u16string conv_utf32_to_utf16(u32string s)
{
return boost::locale::conv::utf_to_utf<char16_t>(s.c_str());
}
u8string conv_utf8_to_utf32(u32string s)
{
return boost::locale::conv::utf_to_utf<char8_t>(s.c_str());
}
u32string conv_utf32_to_utf8(u8string s)
{
return boost::locale::conv::utf_to_utf<char32_t>(s.c_str());
}
u8string cast_u8string(string s)
{
return u8string((char8_t*)s.data(), s.size());
}
string cast_string(u8string s)
{
return string((char*)s.data(), s.size());
}
u16string cast_u16string(wstring s)
{
return u16string((char16_t*)s.data(), s.size());
}
wstring cast_wstring(u16string s)
{
return wstring((wchar_t*)s.data(), s.size());
}