我有一个字符串(实际上是文件名),例如:ноÑÑÑажннаÑ。它是损坏的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')
но��ажна�.

09-11 18:35
查看更多