linux wstring乱码,对C++中ANSI,GBK,utf8,wstring,string,unicode的一些重要踩坑总结

啥是utf8,unicode,gbk,这些就不说了,说的人很多。要说的就是应用中要踩的一些坑和干货。

如果你想写一个需要处理各种格式文本编码的程序,那么一般来讲,存储为UTF8格式,因为UTF8最省空间,字符串操作时,将UTF8转为wstring来操作,千万别存为GBK,也别使用string来操作字符串。

string

GBK,GB2312,utf8都是存在string里的,转换方式就是GBKUTF8,即Utf8ToGbk,GbkToUtf8这些函数。

utf8是unicode的一种,但把它存在string里,操作时转成wstring类型来操作。

GBK,GB2312等ANSI编码的string都可以通过string的字符串操作函数来方便的操作,但UTF8编码的string不可以,他只能存储UTF8,如果要操作UTF8的字符串,请将其转为unicode,即wstring类型后,再来操作。即UTF8ToWString这些函数,千万别用成了StringToWString这类是GBK,ANSI转UNICODE,wstring的函数。

wstring

unicode16,unicode32都是存在wstring里的。相应的转换用下面这种:

//utf16 to utf-8

std::string u16string_to_utf8(const std::u16string& str)

{

std::wstring_convert<:codecvt_utf8_utf16>, char16_t> strCnv;

return strCnv.to_bytes(str);

}

这是C++11里的编码转功能,放弃微软的那套WideCharToMultiByte吧,网上搜得到的与这个函数相关的代码十之八九有内存泄漏,都是抄来抄去的,也不能跨平台,放弃吧。

c++11 string、wstring、UTF-8、UTF-16、UTF-32之间转换 。有位博主做了很完善的互转,链接如下: https://blog.csdn.net/qq_33048069/article/details/103593818

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值