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

相關文章
相關標籤/搜索