从 ISO-8859-1 格式化为 Windows-1251

从 ISO-8859-1 格式化为 Windows-1251

我想修复字符串“Ïåðåïðîøèòü Ñûðîåæêèíà”中的编码并获得正确的UTF-8字符串“Перепрошить Сыроежкина”。 网站告诉我,我需要从 转换 为ISO-8859-1Windows-1251获得正确的结果,但是当我尝试使用iconv此方法时,我收到此错误:

$ echo 'Ïåðåïðîøèòü Ñûðîåæêèíà' | iconv -f iso-8859-1 -t windows-1251 -
iconv: illegal input sequence at position 0

Windows-1251我也不明白的是为什么当我想获得结果时需要将字符串转换为UTF-8.

编辑:我也尝试过使用enconv,但结果也不令人满意。

$ echo 'Ïåðåïðîøèòü Ñûðîåæêèíà' | enca -L ru -
Universal transformation format 8 bits; UTF-8
  Doubly-encoded to UTF-8 from ISO-8859-5
$ echo 'Ïåðåïðîøèòü Ñûðîåæêèíà' | enconv -L ru -x UTF-8 -
Ïåðåïðîøèòü Ñûðîåæêèíà
$ echo 'Ïåðåïðîøèòü Ñûðîåæêèíà' | enconv -L ru -x windows-1251 -

答案1

该字符串似乎是双重编码的:首先,原始的 Windows-1251 被错误解释为 ISO-8859-1,然后这些错误解释的字符本身被转换为 UTF-8 等效项。

事实上,您可以将“错误”文本与“正确”文本一起作为可见字符,这表明您的系统以 UTF-8 或其他一些 Unicode 字符集运行,并且该字符串已被错误解释地转换为 Unicode形式。

尝试这样解码:

echo 'Ïåðåïðîøèòü Ñûðîåæêèíà' | iconv -f utf-8 -t iso-8859-1 | iconv -f windows-1251 -t utf-8
Перепрошить Сыроежкина

如果这些字符实际上采用其本机 8 位编码,则该字符串将在 UTF-8 系统上显示如下:“���������� ���������� ”。任何具有高位集的 ISO-8859-1(或任何 8 位字符集)字符在解释为 UTF-8 时都可能产生“无效编码”结果。 Unicode 有一个特殊的显示符号“�”,表示“该字符已以损坏的方式编码”。

如果您的系统实际上使用的是 ISO-8859-1,您会看到该字符串为“Ïåðåïðîøèòü Ñûðîåæêèíà” - 但随后就不可能在同一终端窗口中显示“Перепрошить Сыроежкина”,因为 ISO-8859-1 不包括根本就是西里尔字母。

您链接的网站可能会将传入字符串视为 UTF-8,并假设此转换只是浏览器和 Web 服务器之间通信的一部分,并且只是识别其他误解。

相关内容