【发布时间】:2011-11-18 14:14:24
【问题描述】:
我正在构建一个应用程序,它通过 tcp 接收带有编码 unicode 的运行时字符串,示例字符串为“\u7cfb\u8eca\u4e21\uff1a\u6771\u5317 ...”。我有以下内容,但不幸的是我只能在编译时从中受益,因为:不完整的通用字符名称 \u 因为它在编译时需要 4 个十六进制字符。
QString restoreUnicode(QString strText)
{
QRegExp rx("\\\\u([0-9a-z]){4}");
return strText.replace(rx, QString::fromUtf8("\u\\1"));
}
我正在寻找运行时的解决方案,我可以预见到分解这些字符串并进行一些操作以将“\u”分隔符之后的那些十六进制转换为基数 10,然后将它们传递给 QChar 的构造函数,但我'正在寻找一种更好的方法,如果存在的话,因为我非常担心这种方法所产生的时间复杂度,而且我不是专家。
有没有人有任何解决方案或提示。
【问题讨论】:
-
fromUtf8("\\u\\1")有效吗?你的想法和这个尝试有同样的问题:const char razy[] = "lass"; crazy Foo { int a; bool b; }; -
为什么不使用
QDataStream对通过套接字的数据进行编码/解码? -
我无法控制服务器,只是使用第三方数据流,因为它是 ascii 和在小场合嵌入 unicode 的混合体。我已经制定了一个效果很好的解决方案,将在 6 小时内发布您自己的问题计时器的答案在本网站上到期。