Text-Processing

從 ISO-8859-1 格式化為 Windows-1251

  • January 13, 2021

我想修復字元串“Ïåðåïðîøèòü Ñûðîåæêèíà”中的編碼並獲得正確的UTF-8字元串“Перепрошить Сыроежкина”。 網站告訴我,我需要從 to 轉換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 -

該字元串似乎是雙重編碼的:首先原始的 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 伺服器之間通信的一部分,並且只是辨識其他誤解。

引用自:https://unix.stackexchange.com/questions/629040