Qt和Unicode转义字符串

5

我正在使用信号和槽从服务器获取数据。以下是槽部分:

QString text(this->reply->readAll());

问题在于,文本变量中将包含Unicode转义字符,例如:

\u043d\u0435 \u043f\u0430\u0440\u044c\u0441\u044f ;-)

有没有办法将这个转换?
3个回答

8
我认为这就是你需要的:
(使用正则表达式查找\uCCCC的出现并将其替换为具有十六进制数字CCCC的QChar)
QRegExp rx("(\\\\u[0-9a-fA-F]{4})");
int pos = 0;
while ((pos = rx.indexIn(str, pos)) != -1) {
    str.replace(pos++, 6, QChar(rx.cap(1).right(4).toUShort(0, 16)));
}

2

1
我认为 OP 的意思是他得到了 Unicode 转义字节序列。即:'', 'u', '0', '4', '3', 'd',这 6 个字节表示一个 16 位码点。 - Stephen Chu
只有当我写类似以下的东西时它才有效: QString text = QString :: fromUtf8(“\ u043d \ u0435”); 也许是因为从服务器返回的响应可能不仅仅是转义,例如: [{"recipient":{"favourites_count":1,"profile_text_color":"000000","url":null,"description":"\u0421\u0442\u0443\u0434\u0435\u043d\u0442 4-\u0433\u043e \u043a\u0443\u0440\u0441\u0430 \u041c\u0418\u042d\u041c - UnstableFractal
你是将整个 [{"recipient":{"favourites_count":1,"profile_text_color":"000000","url":null,"description":"\u0421\u0442\u0443\u0434\u0435\u043d\u0442 4-\u0433\u043e \u043a\u0443\u0440\u0441\u0430 \u041c\u0418\u042d\u041c 传入,还是只传 Unicode 部分?我认为你需要先进行一些分离工作,因为它的格式混合在一起。 - Adam W

-1
这个怎么样?
QString text = reply->readAll().replace("\","\\");

通过使用上面的代码片段,您可以将单斜杠替换为双斜杠,以便像这样获取单斜杠。希望它能正常工作。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接