将 Qt 默认编码设置为 UTF-8

Posted

技术标签:

【中文标题】将 Qt 默认编码设置为 UTF-8【英文标题】:Set Qt default encoding to UTF-8 【发布时间】:2012-02-01 02:13:17 【问题描述】:

在我的 Qt 应用程序中,我的源代码文件被编码为 UTF-8。对于以下代码...

QMessageBox::critical(this, "Nepoznata pogreška", "Dogodila se nepoznata pogreška! Želite li zatvoriti ovaj program ?", QMessageBox::Yes, QMessageBox::No);

...当我显示该消息框时,字符“š”不会显示为“š”,而是显示为奇怪的东西。这是因为 Qt 转换所有 C 字符串,就好像它们是使用 LATIN-1 编码的一样。为了解决这个问题,我一直在使用:

QMessageBox::critical(this, QString::fromUtf8("Nepoznata pogreška"), QString::fromUtf8("Dogodila se nepoznata pogreška! Želite li zatvoriti ovaj program ?"), QMessageBox::Yes, QMessageBox::No);

有没有办法摆脱对QString::fromUtf8()的所有调用?

【问题讨论】:

***.com/questions/29485602/qt-convert-unicode-entites 【参考方案1】:

您是否尝试过使用QTextCodec::setCodecForCStrings(QTextCodec::codecForName("UTF-8"))?

【讨论】:

嗯,现在感觉很愚蠢 :D 我不知道它存在 ;) 谢谢 :) 不要以为qt5可以做这样的事情吗?似乎 setCodecForCStrings 已被删除... 恐怕我无法确定答案,因为我不再从事任何使用 Qt 的工作。我的猜测是 Qt5 假设所有源文件都是 UTF-8 编码(而不是 Latin-1),这可以解释为什么他们删除了这个。如果您遇到与此类似的问题,那么我只想使用您最喜欢的程序员的文本编辑器(例如 Notepad++)检查您的所有源文件是否为 UTF-8 编码?【参考方案2】:

setCodecForCStrings() 已被弃用。 试试吧,

QTextCodec::setCodecForLocale(QTextCodec::codecForName("UTF-8"));

它对我有用。

【讨论】:

【参考方案3】:

关于“Qt5 假定所有源文件都是 UTF-8 编码”的“猜测”:Thiago Macieira 解释了 Qt 的开发人员 here 做出的决定。

根据文档,可以使用QT_NO_CAST_FROM_ASCII 禁用该假设。

【讨论】:

以上是关于将 Qt 默认编码设置为 UTF-8的主要内容,如果未能解决你的问题,请参考以下文章

将JDK默认编码设置为UTF-8

如何设置eclipse默认编码为utf-8

设置myeclipse新建jsp文件默认编码为UTF-8

如何为 Eclipse 中的 Java 源文件设置为 UTF-8 默认编码

怎样设置Myeclipse的jsp页面为默认utf-8编码

windows设置新建文本文档默认编码UTF-8