使用Unicode终结符在QString中访问代码

时间:2016-07-24 14:22:11

标签: c++ qt unicode qstring

我想做某事。像下面的代码......有人有想法吗? 谢谢:))

QString x = QString("\ue001");

if(x.startsWith("\ue")) {
    //...
}

2 个答案:

答案 0 :(得分:1)

要获得UTF8,您需要替换

QString x = QString("\ue001");

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

第一。

关于检查第一个代码点calue是否以十六进制开头。 E:值为

的代码点
\ue???

(每个都有任何十六进制数字?)在UTF8中有以下二进制表示形式(每个都有1或0):

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

假设字节是有效的UTF8,第一个1110表示接下来的两个字节将从10开始,因此无需检查。

因此,对于最简单的情况,足以检查第一个字节(如果字符串不为空等)是否等于0b11101110,即0xee

不那么简单的情况,UTF8,尽管有一个固定的字节顺序,但可以有一个BOM。如果字符串至少有4个字节,前4个字节是

0xef 0xbb 0xbf 0xee

然后也完成了检查。

答案 1 :(得分: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;
}

String必须以双反斜杠开头。