2016-07-24 51 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; 
} 

的字符串必须用双反斜线来启动。