最近遇到需要將中文在utf8格式和gb2312格式之間的轉化,寫了乙個封裝類。
這個類主要利用iconv函式族程式設計實現。
*標頭檔案 */
#include
#include
#define outlen 255
using namespace std;
class codeconverter
public:
private:
iconv_t cd;
public:
// 構造
codeconverter(const char *from_charset,const char *to_charset);
// 析構
~codeconverter();
// 轉換輸出
int convert(char *inbuf,int inlen,char *outbuf,int outlen);
*實現檔案 */
#include "codeconverter.h"
// 構造
codeconverter::codeconverter(const char *from_charset,const char *to_charset)
cd = iconv_open(to_charset,from_charset);
// 析構
codeconverter::~codeconverter()
iconv_close(cd);
// 轉換輸出
int codeconverter::convert(char *inbuf,int inlen,char *outbuf,int outlen)
char **pin = &inbuf;
char **pout = &outbuf;
memset(outbuf,0,outlen);
return iconv(cd,(const char **)pin,(size_t *)&inlen,pout,(size_t *)&outlen);
*測試** */
#include
#include "codeconverter.h"
using namespace std;
int _tmain(int argc, _tchar* argv)
char *in_utf8 = "姝e湪瀹夎";
char *in_gb2312 = "正在安裝";
char out[outlen];
// utf-8-->gb2312
codeconverter cc = codeconverter("utf-8","gb2312");
cc.convert(in_utf8,strlen(in_utf8),out,outlen);
cout << "utf-8-->gb2312 in=" << in_utf8 << ",out=" << out << endl;
// gb2312-->utf-8
codeconverter cc2 = codeconverter("gb2312","utf-8");
cc2.convert(in_gb2312,strlen(in_gb2312),out,outlen);
cout << "gb2312-->utf-8 in=" << in_gb2312 << ",out=" << out << endl;
return 0;
utf 8和gb2312的相互轉換
最近老是涉及到編碼與解碼的問題,gb2312轉utf 8,又或者utf 8轉gb2312 無意中在csdn閒逛發現了乙個cstring 轉utf 8的思路,現摘尋下來,免得到時又找不著了.cstring utf8convert cstring str,int sourcecodepage,int t...
gb2312和UTF 8的區別
gb2312編碼大約包含6000多漢字 不包括特殊字元 編碼範圍為第一位b0 f7,第二位編碼範圍為a1 fe 第一位為cf時,第二位為a1 d3 計算一下漢字個數為6762個漢字。當然還有其他的字元。包括控制鍵和其他字元大約7573個字元編碼 gbk編碼是對gb2312編碼的擴充,容納的漢字更多,...
GB2312 和 UTF 8的區別
本文 gb2312編碼大約包含6000多漢字 不包括特殊字元 編碼範圍為第一位b0 f7,第二位編碼範圍為a1 fe 第一位為cf時,第二位為a1 d3 計算一下漢字個數為6762個漢字。當然還有其他的字元。包括控制鍵和其他字元大約7573個字元編碼 gbk編碼是對gb2312編碼的擴充,容納的漢字...