中文QString轉成char型別中造成亂碼的原因
QString內部採用的是unicode編碼,但是unicode編碼有很多種,在實際應用時應制定具體的編碼形式,常見的有GBK、GB2312和UTF-8等。
UTF-8是解決國際上字元的一種多位元組編碼,它包含全世界國家所用到的所有字元,通用性強。英文單位元組表示,中文需要三個位元組表示。
GBK是國家標準GB2312基礎上擴容後併兼容GB2312標準,無論英文中文都用雙位元組來表示。GBK包含全部中文字元,是中文國家標準的一種編碼方式。GB2312是簡體中文的碼,GBK則支援簡體中文和繁體中文。
指定unicode的編碼方式一般採用的方法是在main函式中新增如下語句:
QTextCodec::setCodecForTr(QTextCodec::codecForName("GBK"));
QTextCodec::setCodecForCStrings(QTextCodec::codecForName("GBK"));
QTextCodec::setCodecForLocale(QTextCodec::codecForName("GBK"));
此處指定unicode編碼方式為GBK編碼;
QString轉換char操作為
QString path("我是漢字");
QByteArray cpath = path.toLocal8Bit(); 注意,這個QByteArray 物件一定要建立
char *p = cpath.data();
此時便完成了中文QString到char型別的轉換。但是我們單步執行程式,從除錯視窗中觀察char中的資料,發現不是”我是漢字“,而是亂碼"ÎÒÊǺº×Ö"
這時,我們就會懷疑我們的轉換沒有成功,其實不然。因為在我們當前所用的QT軟體介面中所顯示的內容是採用latin編碼後的結果,而我們的QString類中的內容”我是漢字“當前採用的是GBK編碼,編碼結果為ce d2 ca c7 ba ba d7 d6,而這八個位元組的資料在latin中就是亂碼"ÎÒÊǺº×Ö",我們將cpath物件展開可看到這八個位元組的資料正是ce d2 ca c7 ba ba d7 d6,所以轉換正確。
相關推薦
中文QString轉成char型別中造成亂碼的原因
QString內部採用的是unicode編碼,但是unicode編碼有很多種,在實際應用時應制定具體的編碼形式,常見的有GBK、GB2312和UTF-8等。 UTF-8是解決國際上字元的一種多位元組編碼,它包含全世界國家所用到的所有字元,通用性強。英文單位元組表示,中文
關於 string轉const char* 過程中中文亂碼問題,GDAL
剛開始用GDAL,輸出路徑 是由string轉到const char*的,但發現漢字總是亂碼,比較懵逼,第一次遇見這種問題,除錯模式下程式碼神奇的跟不進去,顯示找不到檔案之類的, ,查了近兩個小時,一直以為是環境錯了或者庫有問題,最後經過多次排查才發現是GDAL預設不支援中
QT型別轉換 QString轉const char*,QString轉u_short
QString str; bool ok; const char* ch=str.toAscii().constData(); u_short us=str.toUShort(&ok,10);//10表示10進位制 u_short us=str.toUShort(&
QT中QString轉到string型別
std::string QString::toStdString() const Returns a std::string object with the data contained in this QString. The Unicode data is conve
mysql資料庫中日期String轉成datetime型別作比較
在我們日期作為條件查詢時,通常前端傳過來的可能是String=‘2019-03-06’,這樣的日期格式。那麼在傳入後臺和datetime作比較時可以轉換如下格式: <if test="beginTime != null and beginTime != '
String轉成Date型別,操作年月加減
public static void main(String[] args) { String date1 = "2017-07-30"; DateFormat df = new SimpleDateFormat("yy
跨平臺實現wchar_t轉成char
*pc++ = *pw >> 8 ; *pc = *pw ; return 0 ; } char *wstr2cstr(const wchar_t *pwstr , char *pcstr, size_t len) { char *ptemp = pcstr ;
php 將中文字串轉成漢語拼音
功能:將中文字串轉換成漢語拼音,支援簡體、繁體、中英混合,首字母大寫 類庫:Pinyin.class.php 用法: $str = '我愛中國'; $pinyin = new Pinyin(); echo $pinyin->get($str); 結果為:Wo Ai Z
springMVC返回json資料時date型別資料被轉成long型別
在專案的過程中肯定會遇到ajax請求,但是再用的過程中會發現,在資料庫中好好的時間型別資料:2017-05-04 17:52:24 在轉json的時候,得到的就不是時間格式了 而是145245121這
解決nginx在記錄post資料時 中文字元轉成16進位制的問題
1. 問題描述nginx 在獲取post資料時候,如果是中文,則轉換成16進位制顯示在日誌檔案中,如下圖所示。Paste_Image.png日誌格式為: log_format postdata '$remote_addr | $request_body | $resp_body';此篇文章記錄下解決此次問題的
Android讀取檔案時,由byte轉成String字串時出現亂碼
先看看出亂碼的程式碼 public static void getInfo(Context context) { try { FileInputStream
js檔案中的中文提示資訊發到jsp中出現亂碼解決步驟
.js檔案建立預設是gbk編碼,該js檔案中如果有中文,在utf-8的jsp頁面中,顯示改中文,為亂碼! 解決方法: 1--將原來.js檔案中的內容全部複製到剪貼簿中; 2--修改js檔案的編碼格式為utf-8; 3--將剪貼簿中的內容黏貼到原來的js檔案覆蓋原有內
java中char型別轉換成int型別
PlanA: char ch = '9'; if (Character.isDigit(ch)){ // 判斷是否是數字 int num = Integer.parseInt(String.valueOf(ch)); System.out.println(num); }
MFC中TCHAR和CHAR型別的互轉
//將TCHAR轉為char //*tchar是TCHAR型別指標,*_char是char型別指標 TcharToChar (const TCHAR * tchar,&n
Python 讀取檔案中unicode編碼轉成中文顯示問題
Python讀取檔案中的字串已經是unicode編碼,如:\u53eb\u6211,需要轉換成中文時有兩種方式 1.使用eval eval("u"+"\'"+unicodestr+"\'") 2.使用decode: str1 = '\u4f60\u
DateTime型別中獲取DayOfWeek時的英文如何轉換成中文?
1.這是一種最笨的方法 int i=(int)DateTime.Today.DayOfWeek; switch(i) { case 0: txtDate.Text="星期天";
QT QString 轉 char* 中文亂碼問題
最近,QT專案遇到這樣一個問題: 1.將某個 QString 變數轉換成 char * 變數。 2.將char * 變數 轉換成 QString 。然後,測試發現,如果第一步的QString含中文,那麼,得到的char * 變數就會亂碼。部分程式碼如下:main(
java 將字串中含有unicode 轉成中文
private static String ascii2native ( String asciicode ) { String[] asciis = asciicode.split ("\\\\u"); String nativeV
把列表中的unicode轉成中文。用於jinja2中的渲染
在python 下面一個包含中文字串的列表(list)或字典,直接使用print會出現以下的結果: 1 2 3 dict = {"asdf": "我們的python學習"} print dict {'asdf': '\xe6\x88\x91\xe4
java 從mysql中的integer轉成時間類型
edate close 技術 上架 bsp net code util first Date nedate = new Date(); DateFormat dateformat = new SimpleDateFormat("yyy-MM-dd HH