2016-07-24 69 views

回答

1

要獲得UTF8,你需要

QString x = QString(u8"\ue001"); 

第一取代

QString x = QString("\ue001"); 

關於檢查第一個codepoint calue是否以十六進制開頭。 E:與值A碼點

\ue??? 

(與任何十六進制數字的每個?)具有以下在UTF8二進制表示(被1或0的每個):

11101110 10?????? 10?????? 

假定字節是有效UTF8,第一個1110表示接下來的兩個字節將以10開頭,所以不需要檢查。

因此,對於最簡單的情況,檢查第一個字節(如果字符串不是空的等)是否等於0b111011100xee就足夠了。

儘管具有固定的字節順序,但並非如此簡單的情況下,UTF8可以具有BOM。如果字符串至少有4個字節,前4個字節是

0xef 0xbb 0xbf 0xee 

然後檢查也完成了。

+0

除了字符串結構之外,QString使用UTF-16編碼。因此,爲了檢查字符串中包含的第一個代碼點是否與U + Exxx格式匹配,如果您檢查第一個代碼單元是否確實在0xE000和0xEFFF之間(因爲U + Exxx範圍使用UTF-16編碼爲自己的代碼單元)值)... – peppe

+0

感謝您的答案,但我需要將QString(「\ ue001」)的值「001」轉換爲另一個QString => QString(「001」)...並且我想將QString 「001」)到QString(「\ ue001」)。我需要這個交互式的IconFont User Interface設計器...用戶必須輸入:「\ ue001」,因此他可以在用Qt Quick編寫的用戶界面中設置來自Google Material的IconFont。謝謝 :) –

0

我有一天一個解決方案在萬維網的地方:

QString SomeClass::convertStringToUnicode(QString stringCode) 
{ 
    int idx = -1; 
    while((idx = stringCode.indexOf("\\u")) != -1) { 
     int hex = stringCode.mid(idx + 2, 4).toInt(0, 16); 
     stringCode.replace(idx, 6, QChar(hex)); 
    } 
    return stringCode; 
} 

的字符串必須用雙反斜線來啓動。