最近,linux上遇到string為漢字時,需要轉碼存入到資料庫中,將轉碼的函式及其方法記錄一下。
見函式:
標頭檔案是#include
//fromcode:源string使用的字符集,如"utf-8";,對於漢字每個漢字為3個位元組儲存
//tocode:目的string使用的字符集,如"gb2312";,對於漢字每個漢字為2個位元組儲存
//in:需要轉碼的字串
//out:轉碼後的字串
int iconv_code(const string& fromcode, const string& tocode, const string& in, string& out)
lenin = in.size()+1;//字串要有個結束符位
char* oldpassername = new char[lenin];//這裡oldpassername為工作中用的名字,沒什麼特殊含義
strcpy(oldpassername, in.c_str());
lenout = lenin*10;
char* newpassername = new char[lenout];
sin = oldpassername;
sout = newpassername;
ret = iconv(c_pt, &sin, &lenin, &sout, &lenout);
if(ret == -1)
iconv_close(c_pt);
out = newpassername;
delete oldpassername;//別忘記釋放掉
delete newpassername;
return 0;
}
閒話:為什麼需要轉碼呢,一般情況下,資料庫使用gbk字符集儲存,而有使用utf-8的字符集字串會傳入應用程式,這時容易發生問題,但假如應用程式環境變數是utf-8的,資料庫如oracle知道你傳的是utf-8字串,它會自動幫你轉碼,這樣不會有問題;但環境變數標明是gbk的,而應用程式傳入utf-8的漢字,那麼orale會儲存亂碼,因為你欺騙了oracle。所以出現「欺騙」的情形時需要轉碼,注意自己程式是否會欺騙資料庫。
同時,這個iconv函式是作業系統自己開發的庫函式,而不是c++標準的,具體使用方式有可能依據系統不同而不同,我的環境是linux,所以各種linux發行版一般不會出現問題。
字符集編碼的轉換
在程式設計的時候,往往需要字符集間編碼的轉換,這就需要用到乙個函式,它就是iconv函式。iconv不是php的預設函式,需要先安裝後才能用。如果是在windows環境下,可以修改php.ini檔案,將extension php iconv.dll前的 去掉。關於如何使用,這裡可以舉個例子。如下 i...
字元 字符集 字元編碼
字元是指計算機 中使用的字母 數字 字和符號 包括 1 2 3 a b c 等等。在 ascii 編碼中,乙個英文本母字元儲存需要1個位元組。在 gb 2312 編碼或 gbk 編碼中,乙個漢字 字元儲存需要2個位元組 在utf 8編碼中,乙個英文本母字元儲存需要1個位元組,乙個漢字字元儲存需要3到...
字符集之間轉換 字串處理(一)
字符集之間轉換 utf 8,unicode,gb2312 特蒐集了utf 8,unicode,gb2312他們3個之間的相互轉換.utf 8 1 3位元組可變 unicode 2位元組乙個字元 gb2312 1位元組乙個字元 例子 你 字的utf 8編碼 e4 bd a0 11100100 1011...