一般說來,字符分為ASCII集,MultiByte集和WideChar集。
(1)ASCII:用一個字節表示少量的英文字符。
(2)MultiByte:一般指使用一個字節或者兩個字節來表示一個字符的方式,當第一位為0時,用第一個字節表示半角字符,否則是雙字節的全角字符。 GBK,GB2312,BIG5,GB18030等都是是雙字節字符集(DBCS);可以使用string類型表示。
(3)WideChar:常用於Unicode,使用兩個字節表示一個字符,通常使用wchar_t,wstring來存儲。
當使用QT向數據庫中插入中文字符時,產生很多亂碼,但是並不報錯。幸好發現QT中一個QTextCodec類型,在<qtextcodec.h>中定義。 qt對默認的是unicode編碼,但是在Linux下TextCodec通常是GBK的,而Windows下通常是GB18030的。
所以在Linux中,可以定義:
QTextCodec::setCodecForLocale(QTextCodec::codecForName("GBK"));
QTextCodec::setCodecForCStrings(QTextCodec::codecForName("GBK"));
QTextCodec::setCodecForTr(QTextCodec::codecForName("GBK"));
或在Windows中:
QTextCodec::setCodecForLocale(QTextCodec::codecForName("GB18030"));
QTextCodec::setCodecForCStrings(QTextCodec::codecForName("GB18030"));
QTextCodec::setCodecForTr(QTextCodec::codecForName("GB18030"));
一種通用的寫法是:
QTextCodec::setCodecForLocale(QTextCodec::codecForLocale());
QTextCodec::setCodecForCStrings(QTextCodec::codecForLocale());
QTextCodec::setCodecForTr(QTextCodec::codecForLocale());
在使用時:
使用QString::fromLocal8Bit()轉換成QString;
使用QString::ToStdString()得到正確的string類型。
沒有留言:
張貼留言