Utf8和Gb2312相互轉化的封裝

2021-05-23 14:24:36 字數 1728 閱讀 9297

最近遇到需要將中文在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編碼的擴充,容納的漢字...