C 對字串轉換字符集(編碼)

2021-08-27 06:07:39 字數 1200 閱讀 6608

最近,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...