我有一个字符串(实际上是文件名),例如:ноÑÑÑажннаÑ。它是损坏的Lenovo NAS和samba配置的遗产。
enca报告:
通用转换格式8位; UTF-8
从ISO-8859-5双重编码为UTF-8
如何使用perl / shell / python恢复字符串(文件名)?
最佳答案
您将不得不撤消该过程。在Python中,您可以将Unicode值编码为Latin-1以再次获得一对一的字节,因此该过程将是:
从UTF-8解码为Unicode
从Unicode编码为Latin-1
再次从UTF-8解码为Unicode
编码为ISO-8859-5
整齐的文字缺少无法打印的字符。如果忽略损坏的字符,则会得到:
>>> 'ноÑÑажнаÑ.'.decode('utf8').encode('latin1').decode('utf8', 'ignore').encode('iso8859_5')
'\xdd\xde\xd0\xd6\xdd\xd0.'
在编码为ISO-8858-5之前打印结果,但用占位符替换损坏的字符:
>>> print 'ноÑÑажнаÑ.'.decode('utf8').encode('latin1').decode('utf8', 'replace')
но��ажна�.