QT QString 字串和中文字元編碼

2021-07-29 23:59:36 字數 1741 閱讀 7258

qstring 字串和中文字元編碼

qt內部的編碼方式 unicode (utf-16)

linux平台預設使用:utf-8

windows平台預設使用:gbk2312/gbk/gbk18030

qstring內部使用unicode編碼,使用雙引號的字串,通過轉換建構函式,可以將utf-8編碼字元轉換為unicode的使用,也可以正常顯示utf-8編碼的字串。

早期的qt4版本不會做這樣的轉換,那麼顯示中文將亂碼,獲取在windows開發qt程式,一般使用gbk的編碼,顯示中文也將是亂碼。

vmware虛擬機器共享與ubuntu共享資料夾:

【虛擬機器】-【設定】-【選項】-【共享資料夾】-【新增】-新建目錄file

ubuntu虛擬系統中vi終端下訪問windows共享目錄路徑:

"/mnt/hgfs/..."  /mnt/hgfs/file

【注】最好不要用中文路徑,使用英文路徑。

如果出現"亂碼解決方案":

qtextcodec類可以實現將其他編碼方式(gbk)轉換成(unicode)。

eg:// "中文字串" 直接使用將是亂碼

qbytearray encodedstring = "中文字串";

// 構建編碼器物件,引數為當前所使用的編碼方式

qtextcodec *codec = qtextcodec::codecforname("gbk");

// 使用編碼物件呼叫成員函式 tounicode 完成轉換後,就可正常顯示

qstring string = codec->tounicode(encodedstring);

/* **演示 */

// 建立乙個qt的應用程式物件

// 1) 構造編碼物件 【目前ubuntu下vim的預設編碼為utf-8】

qtextcodec* coder = qtextcodec::codecforname ("utf-8");

// 建立乙個標籤物件

// 2) 將要顯示的字串轉換為unicode編碼

qlabel label (coder->tounicode ("你好, qt!"));

// 顯示標籤物件

label.show ();

// 讓我的程式進入事件迴圈

}

練習:構建qpushbutton按鈕物件,按鈕物件內容「按我」;

1)用vi編輯器寫源**,構建(6步),結果可以直接顯示中文

2)將程式button.cpp拷貝到windows共享目錄

共享目錄建立方式參見剛才的

3)使用記事本開啟,另存為,編碼方式選擇ansi編碼(中文gbk)

4)將ansi編碼方式的源**拷貝回ubuntu替換原來的**

5)再次make構建執行,結果將是亂碼

6)設定編碼物件(gbk),轉換為qt內部的unicode編碼,再次make,結果將正常的顯示中文。

/** 練習** **/

qtextcodec* coder = qtextcodec::codecforname ("gbk");

qpushbutton button (coder->tounicode ("按我"));

button.show ();

}

Qt QString字串擷取

利用qt,結合一些影象處理,做軟體的時候,做基礎的首先是讀乙個進來,經常需要用字串存一下所讀的路徑,或者名稱。所以經常會利用到字串的擷取,可以從整串路徑中得到名。以下就介紹兩個擷取字串的函式 mid 函式和section 函式 mid 函式接受兩個引數,第乙個是起始位置,第二個是取串的長度。如果省略...

Qt QString字串分割 擷取

字串陣列 qstringlist b b.insert 陣列下標,資料 b.at 陣列下標 split 按照指定的字元分割,如按照 或 等分割 qstringlist list1 str.split list1 a b c qstringlist list2 str.split qstring sk...

QT 字串中文

qstring內部採用unicode編碼方式,當字串存在中文時,需要根據系統的本地編碼方式進行轉換。一般在window開發環境裡,是gbk編碼,在linux開發環境裡,是utf 8編碼。通過qtextcodec類轉換字串編碼。示例qstring轉const cahr qtextcodec codec...