1、字符集
數組
字符集是一我的爲的規定,人們先用一個小冊子規定好了「文字字符」與「數字」的對應關係。框架
七種,每個字符對應的數字,也成爲該字符的編碼。例如,ASCII碼錶就是一個字符集, 'A'字符對應的編碼是65ide
ASCII: 0 ~ 127,最高位爲0
ui
拉丁字符集:最高位爲1編碼
Unicodespa
Unicode是國際組織制定的能夠容納世界上全部文字和符號的字符編碼方案設計
Unicode用數字0 ~ 0x10FFFF來映射這些字符,最多能夠容納1114112個字符code
是一個超大的字符集blog
Unicode有三種編碼方案unicode
一、UTF-32編碼
每一個字符用一個int來表示,簡單,但很浪費空間
二、UTF-16編碼
用1~2個short來表示一個字符
三、UTF-8編碼
用1~4個字節來表示一個字符
Windows默認是GBK編碼,Linux默認是UTF-8編碼
VC下的轉換方法:
VC中,用wchar_t表明寬字符,至關於short型。一個 wchar_t 的數組來存放unicode字符
2、Qt中的字符、字符串
Qt做爲一個跨平臺的框架,設計之初就考慮了字符的問題;
它封裝了一個QString表明字符串,它是UTF-16編碼的類,同時封裝了一個QChar類表明寬字符;
這時就有一個問題:VS下的編碼方式是GBK
所以像下面這樣直接將字符串賦值給QString的話:
QString str = "一段中文"; ui.lineEdit->setText(str);
運行出來結果就會這樣:
所以須要對字符串進行轉碼:
QString qstr = QString::fromLocal8Bit("一段中文");
Qt框架提供的轉碼的方式以下:
//GBK --> QString QString QString::fromLocal8Bit(const char* str); //QString --> GBK QByteArray bytes = text.toLocal8bit(); //UTF-8 --> QString QString QString::fromUtf8(const char* str); //QString --> UTF-8 QByteArray bytes = text.toUtf8();
但注意,上面介紹的前兩個 Local 轉碼的方法,並不保險,跨平臺性不佳
因此最好用UTF8,給之後的本身少挖幾個坑
使用QTextCodec
QTextCodec用於手工轉換編碼(QString內部調用此類)
能夠在QString 和 std::string 之間相互轉換
3、發佈程序
當程序中帶有中文轉換處理時,須要將Qt使用的文字編碼庫一同發佈
Windows下QT應用程序:
1:找到Qt的編碼庫 Qt\x.x.x\plugins\codecs
2:拷貝codecs這個文件夾,放到目標exe文件所在目錄下
3:把VS的運行時庫拷貝到codecs目錄下
——————————————
尾巴
在對本身沒有足夠信心的狀況下,少在本身的程序中用中文,或許能少挖幾個坑吧