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

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

windows的api函数对:api

WideCharToMultiByte和MultiByteToWideCharide

我的喜欢的跨平台库:函数

单纯作字符编码转换的iconv编码

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

 

示例代码:code

 1 iconv字符编码转换:
 2 
 3 bool gbk2utf8(const char* src, char* dest, size_t inlen)
 4 {
 5     const char* inbuf = src;
 6     size_t outlen = inlen * 4;
 7     char* outbuf = dest;
 8     memset(outbuf, 0, outlen);
 9     iconv_t cd = iconv_open("UTF-8", "GBK");
10     size_t res = iconv(cd, &inbuf, &inlen, &outbuf, &outlen);
11     iconv_close(cd);
12     return (0 == res) ? true : false;
13 }
1 boost字符编码转换
2 
3 #include <boost/locale.hpp>
4 
5 boost::locale::conv::from_utf(utf8_text, "GB2312");


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

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

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

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