我想做某事。像下面的代码......有人有想法吗? 谢谢:))
QString x = QString("\ue001");
if(x.startsWith("\ue")) {
//...
}
答案 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必须以双反斜杠开头。