我想做某事。像下面的代碼...有人有想法嗎? 謝謝:)使用Unicode終止符的QString中的訪問碼
QString x = QString("\ue001");
if(x.startsWith("\ue")) {
//...
}
我想做某事。像下面的代碼...有人有想法嗎? 謝謝:)使用Unicode終止符的QString中的訪問碼
QString x = QString("\ue001");
if(x.startsWith("\ue")) {
//...
}
要獲得UTF8,你需要
QString x = QString(u8"\ue001");
第一取代
QString x = QString("\ue001");
。
關於檢查第一個codepoint calue是否以十六進制開頭。 E:與值A碼點
\ue???
(與任何十六進制數字的每個?)具有以下在UTF8二進制表示(被1或0的每個):
11101110 10?????? 10??????
假定字節是有效UTF8,第一個1110表示接下來的兩個字節將以10開頭,所以不需要檢查。
因此,對於最簡單的情況,檢查第一個字節(如果字符串不是空的等)是否等於0b11101110
即0xee
就足夠了。
儘管具有固定的字節順序,但並非如此簡單的情況下,UTF8可以具有BOM。如果字符串至少有4個字節,前4個字節是
0xef 0xbb 0xbf 0xee
然後檢查也完成了。
除了字符串結構之外,QString使用UTF-16編碼。因此,爲了檢查字符串中包含的第一個代碼點是否與U + Exxx格式匹配,如果您檢查第一個代碼單元是否確實在0xE000和0xEFFF之間(因爲U + Exxx範圍使用UTF-16編碼爲自己的代碼單元)值)... – peppe
感謝您的答案,但我需要將QString(「\ ue001」)的值「001」轉換爲另一個QString => QString(「001」)...並且我想將QString 「001」)到QString(「\ ue001」)。我需要這個交互式的IconFont User Interface設計器...用戶必須輸入:「\ ue001」,因此他可以在用Qt Quick編寫的用戶界面中設置來自Google Material的IconFont。謝謝 :) –
我有一天一個解決方案在萬維網的地方:
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;
}
的字符串必須用雙反斜線來啓動。
首先,\ ue001是指文本,還是作爲unicode符號e001? – deviantfan
它是unicode符號e001 .... –
您使用的是支持C++ 11的編譯器嗎? –