Text-Processing
從 ISO-8859-1 格式化為 Windows-1251
我想修復字元串“Ïåðåïðîøèòü Ñûðîåæêèíà”中的編碼並獲得正確的
UTF-8
字元串“Перепрошить Сыроежкина”。 該網站告訴我,我需要從 to 轉換ISO-8859-1
以Windows-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 伺服器之間通信的一部分,並且只是辨識其他誤解。