我一直在努力解決這個問題一段時間,但與編碼工作是如此痛苦,我必須得到一些幫助你的聰明頭腦。恢復與編碼不佳的文件名
在我對烏克蘭的一次旅行中,一個朋友複製到我的筆中驅動我一些烏克蘭的命名文件。然而,正如你所期望的,在複製到我的電腦的過程中,文件名變成了無法讀取的垃圾,比如這個:
Ôàíòîì
嗯,我有充分的理由相信,原來的文件名使用CP1251編碼(我知道這是因爲我手動檢查編碼表並設法正確地翻譯樂隊的名稱)。顯然發生的是,在複製過程中,保留了CP1251代碼,現在操作系統只是將它們解釋爲Unicode代碼。
我試圖「解釋」在Python代碼與下面的腳本:
print u"Ôàíòîì".decode('cp1251')
這感覺不對,雖然。其結果是完整的垃圾,以及:
Г」Г Гòîì
如果我這樣做:
print repr(u"Ôàíòîì".decode('cp1251'))
我獲得:
u'\u0413\u201d\u0413\xa0\u0413\xad\u0413\u0406\u0413\xae\u0413\xac'
我發現,如果我能得到以Unicode的所有代碼點只是將它們抵消了0x350,我會把它們放在烏克蘭西里爾文的正確位置。但我不知道該怎麼做,可能有一個比這更概念正確的答案。
任何幫助將不勝感激!
編輯:這是正確的翻譯
Ôàíòîì應該翻譯成Фантом的例子。
Ô 0x00D4 -> Ф 0x0424
à 0x00E0 -> а 0x0430
í 0x00ED -> н 0x043D
ò 0x00F2 -> т 0x0442
î 0x00EE -> о 0x043E
ì 0x00EC -> м 0x043C
如前所述,正確和錯誤的代碼點之間有一個0x0350偏移量。
(ok,則該文件是音樂文件...我猜你懷疑......)
其他一些測試串(其翻譯我不知道): AACêîíò>即FL Äâîº Êàï_òîøêà Ïîäèâèñü
可能的重複http://stackoverflow.com/questions/7555335/how-to-convert-a-string-from-cp1251-to-utf8 – saulspatz
這不是CP1251;它看起來像是一個多字節[Mojibake](https://en.wikipedia.org/wiki/Mojibake);你有UTF-8或類似的,它被解碼錯誤。你可以看看['ftfy'庫](http://ftfy.readthedocs.org/en/latest/)是否可以做任何事情。它不能用於你給的樣品。 –
您能和我們分享預期的價值嗎?然後,我們可以嘗試倒退,看看Mojibake是如何創建的,並扭轉過程。並考慮到字節可能已被*丟棄*,因爲它們不映射到可打印字符。給我們'print repr(value)'輸出,而不是'print value'輸出,這樣我們就可以在這裏做任何有意義的事情。 –