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的支持字符編碼差別,暫未進行比較,有須要的請查看二者的文檔。