utf8与其他字符编码的转换是国际化必然遇到的问题。
windows的api函数对:
WideCharToMultiByte和MultiByteToWideChar
个人喜欢的跨平台库:
单纯做字符编码转换的iconv
有准标准之称的boost中locale::conv。
示例代码:
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的优缺点就不说了,谁用谁知道。
iconv是单独库,编译方便,使用稍显麻烦。
boost是个大库,编译稍显复杂,使用极其方便,除非目标平台不支持,一般建议使用。
至于boost和iconv的支持字符编码差异,暂未进行比较,有需要的请查看两者的文档。