UTF8与GBK、GB2312等其他字符编码的相互转换

时间:2022-03-26 10:08:42

utf8与其他字符编码的转换是国际化必然遇到的问题。

windows的api函数对:

WideCharToMultiByte和MultiByteToWideChar

个人喜欢的跨平台库:

单纯做字符编码转换的iconv

有准标准之称的boost中locale::conv。

示例代码:

 iconv字符编码转换:

 bool gbk2utf8(const char* src, char* dest, size_t inlen)
{
const char* inbuf = src;
size_t outlen = inlen * ;
char* outbuf = dest;
memset(outbuf, , outlen);
iconv_t cd = iconv_open("UTF-8", "GBK");
size_t res = iconv(cd, &inbuf, &inlen, &outbuf, &outlen);
iconv_close(cd);
return ( == res) ? true : false;
}
 boost字符编码转换

 #include <boost/locale.hpp>

 boost::locale::conv::from_utf(utf8_text, "GB2312");

windows api的优缺点就不说了,谁用谁知道。

iconv是单独库,编译方便,使用稍显麻烦。

boost是个大库,编译稍显复杂,使用极其方便,除非目标平台不支持,一般建议使用。

至于boost和iconv的支持字符编码差异,暂未进行比较,有需要的请查看两者的文档。