将 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的主要内容,如果未能解决你的问题,请参考以下文章