1. 程式人生 > >Qt中中文字元轉換問題

Qt中中文字元轉換問題


1 QString是按unicode編碼的,如果需要8bit編碼則要加 tr(),要與 char* 相互轉換則需要制定編碼格式:utf-8,gb2312,gbk等

2 自己遇到的問題:

     通過 QString轉換為char*時,全是“????”

     程式設計是在main函式中制定tr()的編碼格式未utf-8但是沒有指定 string的編碼格式

3 解決方法:

    1)需要制定 tr(),和 cstring的編碼格式,在main函式中加兩句程式碼:

  1. QTextCodec::setCodecForTr( QTextCodec::codecForName("utf-8"));  
  2. QTextCodec::setCodecForCStrings(QTextCodec::codecForName("UTF-8"));  



   2)取得QString物件後,通過QByteArray轉換為char*:        

  1.   QString 
    str = "我愛QT"  
  2.   char  c[20]  = { 0};  
  3.  QByteArray ba = str.toAscaii(); //用其它,諸如toLantin1仍然得到亂的  
  4.  snprintf(c,szieof(c),"%s",ba.data());  // 可以得到正確的char*了,  

  3)char*轉換為QString

  1.  QString str;  
  2.  char  c[20] = {"我愛QT"};  
  3.  str = QString::fromAscaii(c,stlen(c)); //這樣就得到char*轉為正確的QSstring 
PS:

Qt5 取消了QTextCodec::setCodecForTr()和QTextCodec::setCodecForCString()這兩個函式。

直接將 QTextCodec::setCodecForLocale(QTextCodec::codecForName(“UTF8”)) 至於QApplication例項之前即可解決;


1 QString是按unicode編碼的,如果需要8bit編碼則要加 tr(),要與 char* 相互轉換則需要制定編碼格式:utf-8,gb2312,gbk等

2 自己遇到的問題:

     通過 QString轉換為char*時,全是“????”

     程式設計是在main函式中制定tr()的編碼格式未utf-8但是沒有指定 string的編碼格式

3 解決方法:

    1)需要制定 tr(),和 cstring的編碼格式,在main函式中加兩句程式碼:

  1. QTextCodec::setCodecForTr( QTextCodec::codecForName("utf-8"));  
  2. QTextCodec::setCodecForCStrings(QTextCodec::codecForName("UTF-8"));  



   2)取得QString物件後,通過QByteArray轉換為char*:        

  1.   QString str = "我愛QT"  
  2.   char  c[20]  = { 0};  
  3.  QByteArray ba = str.toAscaii(); //用其它,諸如toLantin1仍然得到亂的  
  4.  snprintf(c,szieof(c),"%s",ba.data());  // 可以得到正確的char*了,  

  3)char*轉換為QString

  1.  QString str;  
  2.  char  c[20] = {"我愛QT"};  
  3.  str = QString::fromAscaii(c,stlen(c)); //這樣就得到char*轉為正確的QSstring 
PS:

Qt5 取消了QTextCodec::setCodecForTr()和QTextCodec::setCodecForCString()這兩個函式。

直接將 QTextCodec::setCodecForLocale(QTextCodec::codecForName(“UTF8”)) 至於QApplication例項之前即可解決;