基于 C++ Boost locale 库,将 utf8,utf16,utf32 字符集互相转换

学习记录,便于查询

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());
}

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值