【问题标题】:Qt unicode and umlautsQt unicode 和变音符号
【发布时间】:2011-06-29 12:16:19
【问题描述】:

由于我们已将所有源文件和头文件都转换为 unicode,因此我们面临着德语变音符号的问题。源代码中的一切都很好,但 QLabels 和其他 gui 组件显示变音符号乱码。

ISO-8859-1 源可以正常工作,但在 OSX 和 Windows 之间切换时会出现问题。

我需要在项目文件中设置什么吗?

环境:Qt 4.7 和 Qt Creator 2.3.0 在 Windows XP SP3 上使用 MinGW

【问题讨论】:

  • 看起来您渲染的输出不期望 UTF-8。您应该以某种方式对其进行配置。
  • 可能您的源文件是 UTF-8 编码的,在 Windows 上打开时它认为它是 ISO-8859 编码的?
  • @RedX:Qt 应该把所有这些都抽象出来,所以我们真的不必知道 Windows 在想什么。我认为答案应该是关于 Qt 的。
  • @Kerrek 最终是编译器将该字符串转换为字节,选择 'Ä' 是 Unicode'A+˝' 还是 Unicode'Ä' 或 ASCII'Ä' 并且他可以(在 C++ 之前0x) 只知道从文件编码。他可以做的是 QString::fromUTF8 或 QString::fromASCII 以确保 QString 在创建字符串时使用正确的编码。
  • @RedX:您可以清楚地看到该字符串被编码为 UTF-8,但按字节显示。

标签: qt unicode internationalization diacritics


【解决方案1】:

尝试调用

QTextCodec::setCodecForCStrings(QTextCodec::codecForName("UTF-8"));
QTextCodec::setCodecForTr(QTextCodec::codecForName("UTF-8"));

在创建 QApplication 对象之后。仅当您使用tr() 时才需要QTextCodec::setCodecForTr

编辑:这仅适用于早于版本 5 的 Qt。较新的 Qt 版本需要将源文件转换为 UTF-8。

【讨论】:

  • 谢谢,这就像一个魅力。请补充说,如果有人使用tr(),您需要设置QTextCodec::setCodecForTr(QTextCodec::codecForName("UTF-8"));,否则它将不起作用。然后我会很乐意接受你的回答。
  • 要让QByteArray::fromPercentEncoding()QByteArray::fromBase64() 使用编码的非ASCII 字符,我必须首先调用QTextCodec::setCodecForCStrings() QTextCodec::setCodecForLocale()。在该系统上,LANG 环境变量设置为 en_US.UTF-8
【解决方案2】:

我遇到了类似的问题,并决定在我的源文件中只使用 7 位 ASCII 字符并安装一个创建变音符号的 QTranslator。

由于应用程序无论如何都需要翻译成其他语言,这似乎是避免编码问题的好方法。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-16
    • 1970-01-01
    • 2012-12-10
    • 1970-01-01
    相关资源
    最近更新 更多