我想做某事。像下面的代码...有人有想法吗? 谢谢:)使用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的编译器吗? –