使用Unicode终止符的QString中的访问代码

Access Code in QString with Unicode Terminator

本文关键字:访问 代码 QString 使用 终止 Unicode      更新时间:2023-10-16

我想制作如下代码。。。有人有主意吗?谢谢:)

QString x = QString("ue001");
if(x.startsWith("ue")) {
    //...
}

要获得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

那么检查也完成了。

我有一个来自万维网某处的解决方案:

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;
}

字符串必须以双反斜杠开头。