编码问题:Qt 应用程序从文件中删除所有非 ASCII 字符

编码问题:Qt 应用程序从文件中删除所有非 ASCII 字符

Qt 应用程序正在从我的 Gentoo 系统上的 ISO-8859 编码文件中删除非拉丁字符。实际上,我正在尝试使用 KDiff3 和 P4Merge 合并两个德语文件(从“Wählen”中生成“Whlen”)。这两种工具都不显示变音符号,并且在保存文件时,它们也会消失在文件中。使用 Dejavu Monospace 字体,Courier New 显示相同的行为。

如果将 UTF-8 编码的文件提供给工具,则所有非拉丁文都会得到正确处理。

GTK Meld(以及所有其他 GTK 应用程序)可以很好地处理字符(ISO-8859-1 和 UTF-8)。我相信这是我的区域设置配置,但无法辨别出什么问题......

有任何想法吗?

配置:

 $ locale -a
 C
 POSIX
 de_DE
 de_DE.iso88591
 de_DE.iso885915@euro
 de_DE.utf8
 de_DE@euro
 deutsch
 en_US
 en_US.iso88591
 en_US.utf8
 german

 $ locale
 LANG=en_US.UTF-8
 LC_CTYPE="en_US.UTF-8"
 LC_NUMERIC="en_US.UTF-8"
 LC_TIME="en_US.UTF-8"
 LC_COLLATE=C
 LC_MONETARY="en_US.UTF-8"
 LC_MESSAGES="en_US.UTF-8"
 LC_PAPER="en_US.UTF-8"
 LC_NAME="en_US.UTF-8"
 LC_ADDRESS="en_US.UTF-8"
 LC_TELEPHONE="en_US.UTF-8"
 LC_MEASUREMENT="en_US.UTF-8"
 LC_IDENTIFICATION="en_US.UTF-8"
 LC_ALL=

Qt 使用标志x11-libs/qt-core-4.8.2:4

exceptions glib iconv qt3support ssl (-aqua) -c++0x -debug -icu -pch
(-optimized-qmake%) (-qpa%)

答案1

如果将 UTF-8 编码的文件提供给工具,则所有非拉丁文都会得到正确处理。

那我建议你重新编码将文件转换为 UTF-8,合并它们,然后在必要时重新编码回来。

GTK Meld(以及所有其他 GTK 应用程序)可以很好地处理字符(ISO-8859-1 和 UTF-8)。

我想您可能会将此称为功能,而不是错误:当应用程序看到某些字节序列时,它无法将其解释为当前语言环境中的字符,它有多个选项。它可能会开始猜测,这显然就是 GTK 所做的。或者它可能认为相应的字节是错误并将它们从文件中删除。或者它可能会通知用户这些问题,这会更好,但显然 KDE 并没有走这么远。

我相信这是我的区域设置配置,但无法辨别出什么问题......

您的区域设置表明文本文件应编码为 UTF-8。然而你的文件却不是。所以存在差异。您可以通过重新编码文件或使用不同的区域设置启动相关进程来解决此问题。该LC_CTYPE方面应该是相关的,但LC_ALL为了确定起见,先从第一个开始。从命令行调用命令时,只需在命令前添加正确的设置即可,即

LC_CTYPE=en_US.iso88591 kdiff3 foo bar

相关内容