300字范文,内容丰富有趣,生活中的好帮手!
300字范文 > linux wstring乱码 对C++中ANSI GBK utf8 wstring string unicode的一些重要踩坑总结

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

时间:2018-11-02 19:04:41

相关推荐

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之间转换 。有位博主做了很完善的互转,链接如下: /qq_33048069/article/details/103593818

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。