读取以 Western 编码 (ISO-8859-1) 编码的文本文件时出现问题

读取以 Western 编码 (ISO-8859-1) 编码的文本文件时出现问题

我在 ISO-8859-1 文本文件(波兰语字幕)的编码方面遇到问题,如下所示:

Mieszka³ sam,|¿adnej ¿ony,dzieci。

应该是:“Mieszkał sam,żadnej żony,dzieci”。

我试过了:

  • 使用 iconv 将文本文件转换为 UTF-8
  • 使用 medit 将编码更改为 UTF-8。
  • 将系统语言更改为波兰语(我在系统语言上使用英语区域设置,但使用波兰语键盘设置)

我正在使用 Arch Linux 发行版。我将放置有关区域设置的信息,因为它可能会对案例产生影响。

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

感谢您的所有回答。

答案1

波兰语的标准 8 位编码是latin2 又名 ISO 8859-2。带有 ³ 代表 ł、¿ 代表 ż 等的文本是解释代表 latin2 文本的字节序列的结果,就好像它们代表 latin1 一样。 Latin1 又名 ISO 8859-1 是大多数西欧语言的标准编码。

如果文本以 latin2 编码,则需要将其从 latin2 转换为 UTF-8,而不是从 latin1 转换为 UTF-8。

iconv -f latin2 -t utf8

-t utf8这里是可选的,因为您调用的是 UTF-8 语言环境。)

如果您显示的是您阅读时的文本,则意味着它在某个时刻从 8 位转换为 Unicode 的过程很糟糕。要纠正它,请转换回原始字节,然后将它们转换为您的编码。

iconv -f utf8 -t latin1 | iconv -f latin2 -t utf8

答案2

我找到了解决方案,并将答案留在这里,因为它可能对其他遇到同样问题的人有用。

使用不同的编码打开文本文件!对我来说(波兰语),它是 CP1250(中欧)。为此,请打开 gedit,选择“打开”选项并找到所需的文件。然后选择字符编码(左下角)并选择“WINDOWS-1250”。

由于它与电影字幕相关联,因此无需每次在运行电影字幕之前手动更改编码。几乎每个视频播放器都有一个选择默认字幕编码的选项。对于波兰语,只需选择 Windows-1250,应用程序就会读取字幕,就好像它们是用该编码编码的一样。

不管怎样,谢谢你的帮助吉尔斯!

相关内容