3

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

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

这一行:

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

会显示:

在此处输入图像描述

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

4

4 回答 4

4

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

屏幕

于 2016-11-10T21:47:02.153 回答
3

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

我从这个线程中找到了答案:

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

于 2013-07-19T11:29:31.727 回答
1

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

在此处输入图像描述

在此处输入图像描述

于 2019-06-25T10:11:07.273 回答
-1

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

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

或者为所有 c 字符串设置它:

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

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

于 2013-06-02T16:27:03.307 回答