轉入函數 | 轉出函數 | 描述 |
---|---|---|
fromLocal8Bit | toLocal8Bit | 與作業系統及在地化語言相關,Linux 一般是 UTF-8 字串,Windows 一般是 ANSI 多位元組編碼字串。 |
fromUtf8 | toUtf8 | 與 UTF-8 編碼的字串相互轉換。 |
fromUtf16 |
utf16 和 unicode |
與 UTF-16(UCS2)編碼的字串互相轉換,utf16 函數與 unicode 函數功能一樣, 注意沒有 to 字首,因為 QString 執行時的內碼就是 UTF-16,字元的雙位元組採用主機位元組序。 |
fromUcs4 | toUcs4 | 與 UTF-32(UCS4)編碼的字串互相轉換,一個字元用四個位元組編碼,佔空間多,應用較少。 |
fromStdString | toStdString | 與 std::string 物件互相轉換,因為 C++11 規定標準字串 std::string 使用 UTF-8 編碼,這對函數功能與上面 **Utf8 轉碼函數相同。 |
fromStdWString | toStdWString | 與 std::wstring 物件相互轉換,在 Linux 系統裡寬字元是四位元組的 UTF-32,在 Windows 系統裡寬字元是兩位元組的 UTF-16。因為不同平台有歧義,不建議使用。 |
fromCFString fromNSString |
toCFString toNSString |
僅存在於蘋果 Mac OS X 和 iOS 系統。 |
//qtcodec.cpp #include <QApplication> #include <QTextBrowser> #include <QDebug> #include <iostream> using namespace std; void Testcout(const QString &str) { //Locale charset cout<<str.toLocal8Bit().data()<<endl; //UTF-8 cout<<str.toUtf8().data()<<endl; cout<<str.toStdString()<<endl; //UTF-16, Windows Unicode, UCS2 cout<<str.unicode()<<endl; cout<<str.utf16()<<endl; cout<<str.data()<<endl; //UTF-32, UCS4 cout<<str.toUcs4().data()<<endl; //wchar_t: Windows = UTF-16; Linux/Unix = UTF-32 wcout<<str.toStdWString(); cout<<endl<<endl; } void TestqDebug(const QString &str) { //Locale charset qDebug()<<str.toLocal8Bit().data(); //UTF-8 qDebug()<<str.toUtf8().data(); qDebug()<<str.toStdString().data(); //UTF-16, Windows Unicode, UCS2 qDebug()<<str.unicode(); qDebug()<<str.utf16(); qDebug()<<str.data(); //UTF-32, UCS4 qDebug()<<str.toUcs4().data(); //wchar_t: Windows = UTF-16; Linux/Unix = UTF-32 qDebug()<<str.toStdWString().data(); //QString object qDebug()<<str; } int main(int argc, char *argv[]) { QApplication a(argc, argv); QString strText = QObject::tr("1234列印漢字"); QTextBrowser tb; tb.setText(strText); tb.setGeometry(40, 40, 400, 300); tb.show(); //Test cout Testcout(strText); //Test qDebug //TestqDebug(strText); return a.exec(); }qtcodec.cpp 裡面首先是標頭檔案包含和命名空間使用,然後是三個函數:Testcout、TestqDebug 和 main 函數。Testcout 和 TestqDebug 函數裡的內容參看上面表格,就不一一解釋了。