我有一个包含带有Unicode字符的文件名的行编辑,它在GUI中正确显示,但当我用qDebug()
打印时,它会将Unicode符号显示为问号。
例如,对于"C:/Test/абв"
,此代码仅显示"C:/Test/???"
。
这一行:
qDebug() << ui->lineEditFileName->text();
会显示:
这个问题只发生在Windows(XP和7)上,在Linux上运行正常。 Qt的版本是4.8.0。
答案 0 :(得分:3)
似乎Unicode文本“在翻译中丢失”,因为Qt Creator在读取进程的调试输出时使用QString::fromLocal8Bit()
。
我从this thread找到答案:
我不知道qDebug用什么来将字符串放到控制台上 windows(我假设QString :: toLocal8Bit)。我知道Qt Creator使用 QString :: fromLocal8Bit(...)从进程中读取文本。那 无处不在......但不幸的是,那里有一个操作系统 仍然坚持使用完全破坏任何代码页的代码页 尝试在某种类型上显示多种脚本。
答案 1 :(得分:2)
答案 2 :(得分:0)
答案 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”成为程序中所有字符串的默认编解码器。