【问题标题】:qDebug() doesn't support unicode strings on WindowsqDebug() 在 Windows 上不支持 unicode 字符串
【发布时间】:2013-05-28 21:15:15
【问题描述】:

我有一个包含带有 Unicode 字符的文件名的行编辑,它在 GUI 中正确显示,但是当我使用 qDebug() 打印它时,它会将 Unicode 符号显示为问号。

例如,对于"C:/Test/абв",此代码将仅显示"C:/Test/???"

这一行:

qDebug() << ui->lineEditFileName->text();

会显示:

此问题仅在 Windows(XP 和 7)上发生,在 Linux 上运行正常。 Qt的版本是4.8.0。

【问题讨论】:

    标签: c++ windows qt unicode qdebug


    【解决方案1】:

    还要检查控制面板中的“区域和语言”->“非 Unicode 程序”设置。它帮助我修复了调试控制台中的错误符号。

    【讨论】:

    • 这也适用于 Windows 10,只有非 unicode 程序的设置对话框更加隐藏。
    【解决方案2】:

    似乎 Unicode 文本“在翻译中丢失”,因为 Qt Creator 在读取进程的调试输出时使用了QString::fromLocal8Bit()

    我从this thread找到了答案:

    我不知道 qDebug 使用什么将字符串放到控制台上 windows(我假设 QString::toLocal8Bit)。我知道 Qt Creator 使用 QString::fromLocal8Bit(...) 从进程中读取文本。那 在任何地方都很好用......但不幸的是那里有一个操作系统 仍然坚持使用完全破坏任何 尝试在一个类型中显示不止一种脚本。

    【讨论】:

    • 即Qt 不是在内部做正确的事情(从 UTF-8 转换为/从 UTF-8 转换),或者是本地的事情(在 Windows 上是 UTF-16),而是使用本地 8 位编码并破坏 Unicode 文本?这不能怪 Windows,有两种明智的方法可以做到这一点,而 Qt 两者都没有。
    • 我同意,当他们控制两端并且知道他们都支持 UTF8 时,没有理由选择 to/fromLocal8Bit。
    【解决方案3】:

    在哪里可以找到 @XandrGuard 在 Windows 10 中描述的设置:语言 -> 管理语言设置 -> 更改系统区域设置 -> 检查 Beta:使用 unicode utf-8。 (需要重新启动)

    【讨论】:

      【解决方案4】:

      Linux 使用 Unicode 作为它的终端,而 Windows - 没有。您可以通过在cmd 中键入chcp 来了解使用了哪个代码页。您需要在输出之前使用此代码页转换您的字符串:

      QTextCodec *codec = QTextCodec::codecForName("CP866");
      qDebug() << codec->fromUnicode(ui->lineEditFileName->text());
      

      或者为所有 c-strings 设置它:

      int main()
      {
          ...
          QTextCodec::setCodecForCStrings(QTextCodec::codecForName("CP866"));
          ...
      }
      

      第二段代码将使“CP866”成为程序中所有字符串的默认编解码器。

      【讨论】:

      • qDebug() 在我的情况下输出在 Qt Creator 的应用程序输出窗格中,而不是在 cmd 中,因为我的应用程序不是控制台应用程序。
      • Application Output 使用Utf-8。您是否使用不同的文本编解码器?
      • 不,我不使用,这发生在一个新创建的项目上,我只有一个行编辑和一个按钮,我在按钮的插槽中执行qDebug() &lt;&lt; ui-&gt;lineEdit-&gt;text();。如果行编辑中的字符串是 Unicode,它在应用程序输出中显示为问号。
      • Windows 绝对使用 Unicode 作为其终端。不过,您可能没有选择具有足够字形的终端字体,但在 Linux 上也可能出现同样的错误。想想看:WriteConsoleW 的意义何在? Qt Creator 中可能存在相同的字体问题。输出面板使用哪种字体?
      • 所以你的意思是字体可能是问题?但是我无法弄清楚面板的字体是什么,只有一种字体设置,并且是针对文本编辑器本身的,更改它不会影响应用程序输出窗格。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-08-15
      • 1970-01-01
      • 1970-01-01
      • 2016-04-29
      • 1970-01-01
      • 2016-06-09
      • 1970-01-01
      相关资源
      最近更新 更多