QT是一個跨平臺的框架
它封裝了一個QString類來表明字符串,它是一個Unicode16編碼的類 (每一個字符佔兩個字節)
同時封裝了一個QChar類表明寬字符數組
默認亂碼:
QString 框架
//亂碼演示ssh
/*QString str = "你好!世界"; //cpp是GBK編碼,不能直接給QString
ui.linetxt->setText(str); *ide
//正確中文顯示演示
QString str = QString::fromLocal8Bit("你好!世界");//用QString 下的 fromLocal8Bit()函數把中文轉換成QString
ui.linetxt->setText(str)函數
QString text = ui.linetxt->text(); //獲取用戶輸入
QByteArray bytes = text.toLocal8Bit(); //轉換成QByteArray類型(Local8Bit是GBK的一個編碼)
//QByteArray是QT封裝字節數組的一個類
const char *gbk = bytes.data(); //取得bytes裏的數據首地址 用常量字符指針gbk指向它工具
//因爲咱們使用的系統是中文Windows,因此本地編碼就是GBK
//然而,若是咱們的系統是Linux,那本地編碼極可能是UTF-8 ->意味着以上都是扯蛋
ui
------------------------------------------------------------------------------
獲取用戶輸入並轉成UTF8
QString text = ui.linetxt->text(); //獲取用戶輸入
QByteArray bytes = text.toUtf8(); //轉換成QByteArray類型(Local8Bit是GBK的一個編碼)
//QByteArray是QT封裝字節數組的一個類
const char *gbk = bytes.data(); //取得bytes裏的數據首地址 用常量字符指針gbk指向它
int size = bytes.size(); //返回字節數
this
-----------------編碼
使用QTextCodec
QTextCodec用於手工轉換編碼 (QString內部調用此類)
//QString(Unicode)->std::string(GBK)
static string FromUnicode(const QString& qstr) //
{
QTextCode* pCodec=QTextCodec::codecForName("gb2312"); //("GBK") QT工具類
if(!pCodec)return"";spa
QByteArray arr=pCodec->fromUnicode(qstr); //把qstr轉換成字節數組
string cstr=arr.data() //再把它封裝成string類型
return cstr;
}
#include "qtchinesesshow.h" #include"QTGBK.h" QTChinesesShow::QTChinesesShow(QWidget *parent) : QMainWindow(parent) { ui.setupUi(this); connect(ui.btnOK, SIGNAL(clicked()), this, SLOT(OnBtnTest())); //鼠標點擊btnOK執行OnBtTest() } QTChinesesShow::~QTChinesesShow() { } int QTChinesesShow::OnBtnTest() { //100%亂碼演示 /*QString str = "你好!世界"; //cpp是GBK編碼,不能直接給QString ui.linetxt->setText(str); */ //正確中文顯示演示 //GBK->QString(Unicode16) //QString str = QString::fromLocal8Bit("你好!世界");//用QString 下的 fromLocal8Bit()函數把中文轉換成QString //ui.linetxt->setText(str); //顯示 //------------------------------------------ //QString->GBK Unicpde16轉換成GBK //QString text = ui.linetxt->text(); //獲取用戶輸入 //QByteArray bytes = text.toUtf8(); //轉換成QByteArray類型(Local8Bit是GBK的一個編碼) // //QByteArray是QT封裝字節數組的一個類 //const char *gbk = bytes.data(); //取得bytes裏的數據首地址 用常量字符指針gbk指向它 //int size = bytes.size(); //因爲咱們使用的系統是中文Windows,因此本地編碼就是GBK //然而,若是咱們的系統是Linux,那本地編碼極可能是UTF-8 ->意味着以上都是扯蛋 //使用UTF8 //char utf8[] = { 0xE4, 0xBD, 0xA0, 0xE5, 0xA5, 0xBD, 0 }; //QString str2 = QString::fromUtf8(utf8); string text = GBK::FromUnicode(ui.linetxt->text()); return 0; }
///////////////////////////////////////////////////////
// 封裝 #ifndef _QT_GBK_H #define _QT_GBK_H #include<QString> #include<QTextCodec> #include<string> using std::string; class GBK { public: static string FromUnicode(const QString& qstr) { QTextCodec* pCodec = QTextCodec::codecForName("gb2312"); if (!pCodec)return ""; QByteArray arr = pCodec->fromUnicode(qstr); string cstr=arr.data(); return cstr; } static QString ToUnicode(const string& cstr) //QBT轉換QString { QTextCodec* pCodec = QTextCodec::codecForName("gb2312"); if (!pCodec)return ""; QString qstr = pCodec->toUnicode(cstr.c_str(), cstr.length()); return qstr; } }; #endif// 使用:: QString str = GBK::ToUnicode("你好中國"); ui.linetxt->setText(str); //uilinetxt->setText(GBK::ToUnicode("你好中國")) string text = GBK::FromUnicode(ui.linetxt->text());//獲取用戶輸入