【问题标题】:Set Qt default encoding to UTF-8将 Qt 默认编码设置为 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()的所有调用?

【问题讨论】:

标签: qt utf-8 character-encoding c-strings


【解决方案1】:

【讨论】:

  • 嗯,现在感觉很愚蠢 :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 禁用该假设。

    【讨论】:

      猜你喜欢
      • 2012-03-10
      • 1970-01-01
      • 2014-01-07
      • 1970-01-01
      • 1970-01-01
      • 2014-03-15
      • 1970-01-01
      • 2016-08-06
      • 1970-01-01
      相关资源
      最近更新 更多