【问题标题】:qDebug outputs QString UTF-8 non-Ascii symbols as like \uxxxxqDebug 输出 QString UTF-8 非 Ascii 符号,如 \uxxxx
【发布时间】:2015-10-26 19:06:36
【问题描述】:

我正在尝试将 unicode 中的字符串 (QString) 转换为 utf-8。

qDebug 打印这样的字符串:

"故障码soap:客户端:\u041F\u043E\u043B\u044C\u0437\u043E\u0432\u0430\u0442\u0435\u043B\u044C\u0441\u0438\u0434\u0435\u043D\u04442\u0438\u \u0438\u043A\u0430\u0442\u043E\u0440\u043E\u043C \u00AB16163341545811\u00BB \u043D\u0435 \u043D\u0430\u0439\u0434\u0435\u043D"

我尝试过像这样使用QTextCodec,但它输出相同的不可读字符串:

QTextCodec *codec = QTextCodec::codecForName("UTF-8");
QString readableStr = QString::fromUtf8(codec->fromUnicode(str));

我做错了什么?

编辑:

我想知道发生了什么,但是当qDebug 打印出QString...时会发生这种情况...

以下代码

qDebug() << QString::fromUtf8("тест") << "тест" << QString::fromUtf8("тест").toUtf8().data();

打印出来:

"\u0442\u0435\u0441\u0442" тест тест

【问题讨论】:

  • 输入是什么?你最初在str 有什么?
  • 有趣的事情...qDebug() &lt;&lt; QString::fromUtf8(yourOutput); 使用 linux 和 utf-8 作为源的默认编解码器打印了我 Fault code soap:Client: Пользователь с идентификатором «16163341545811» не найден。您的 QTextCodec 代码没有任何改变。
  • 嗯,我在 linux 上:locale -a 输出:C POSIX ru_RU.utf8 我主要设置:QTextCodec::setCodecForLocale(QTextCodec::codecForName("UTF-8"));跨度>
  • 在我看来,字符串已经采用UTF-8 编码。您是否尝试将UTF-8 转换为UTF-8 两次?还要确保您的控制台设置为UTF-8

标签: c++ qt utf-8 qstring qdebug


【解决方案1】:

我不知道 Qt 邮件列表中的确切线程,但这种行为是最近引入的,因为 qDebug 最初是为了调试对象的内部状态。非 ASCII 字符现在这样输出,大多数人似乎不喜欢,但负责的开发人员或维护人员希望保持这种方式。

【讨论】:

  • 谢谢!我想是这个原因!
【解决方案2】:

我假设变量 str 的类型为 QString。您的 readableStr 与 str 具有相同的内容。 UTF-8 是使用 8 位字符的 Unicode 字符串编码,可以存储在 QByteArray 中。 qDebug 使用一些特殊功能在控制台或调试缓冲区中显示字符串,以帮助您了解字符串的内容。如果您将 QString 放在任何 GUI 元素中,您将看到预期的可读内容。

【讨论】:

  • 是的,你是对的,str 是一个 QString。我需要在控制台中有可读的输出,它不是 GUI 应用程序。
  • 尝试:std::cout
猜你喜欢
  • 2013-10-11
  • 2019-05-19
  • 1970-01-01
  • 1970-01-01
  • 2011-06-19
  • 2021-10-27
  • 2021-11-17
  • 2013-11-17
  • 1970-01-01
相关资源
最近更新 更多