qDebug()不支持Windows上的unicode字符串

时间:2013-06-02 16:02:08

标签: c++ windows qt unicode qdebug

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

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

这一行:

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

会显示:

enter image description here

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

4 个答案:

答案 0 :(得分:3)

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

我从this thread找到答案:

  

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

答案 1 :(得分:2)

同时检查这个&#34;地区和语言&#34; - &GT; &#34;非Unicode程序&#34;在控制面板中设置。它帮助我在调试控制台中修复了错误的符号。

screen

答案 2 :(得分:0)

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

enter image description here

enter image description here

答案 3 :(得分:-1)

Linux使用Unicode作为终端,而Windows则不然。您可以在chcp中输入cmd来查找使用的代码页。您需要的是在输出之前使用此代码页转换字符串:

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

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

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

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