qDebug()在Windows上不支持unicodestring

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

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

这一行:

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

会显示:

在这里输入图像说明

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

Solutions Collecting From Web of "qDebug()在Windows上不支持unicodestring"

看起来,Unicode文本是'在翻译中丢失',因为Qt Creator使用QString::fromLocal8Bit()读取进程的调试输出时。

我从这个线索找到了答案:

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

在控制面板中选中“区域和语言” – >“非Unicode程序”设置。 它帮助我在调试控制台中修复错误的符号。

屏幕

Linux使用Unicode作为终端,Windows – 不。 你可以通过在cmd键入chcp来找出使用哪个代码页。 你需要的是在输出之前使用这个代码页来转换你的字符串:

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

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

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

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