有问题的文件名 - 拉丁语?我如何将其转换为ascii?

时间:2013-01-21 15:59:44

标签: python string filenames

检索文件以从gmail保存时,我收到以下错误消息:

Traceback (most recent call last):
  File "C:\a.py", line 32, in on_hello
    if getmail(self):
  File "C:\a.py", line 96, in getmail
    fp = open(att_path, 'wb')
IOError: [Errno 22] invalid mode ('wb') or filename: '.\\=?iso-8859-1?Q?CC_GM=5F
Est=E1vel.xlsx?='

现在,我怀疑=?iso-8859-1?Q?CC_GM=5FEst=E1vel.xlsx?=是问题,如何将其转换为ansii?我尝试使用各种.decode和.encode组合但没有成功。

由于

3 个答案:

答案 0 :(得分:3)

您正在查看Quoted-printable编码(MIME电子邮件标头中使用的变体,称为encoded-word)。 email.header module为您处理此问题:

>>> from email.header import decode_header
>>> for part in decode_header('=?iso-8859-1?Q?CC_GM=5FEst=E1vel.xlsx?='):
...     value = str(*part)
...     print(value)
...
CC GM_Estável.xlsx

答案 1 :(得分:1)

这是一个MIME编码的电子邮件标题。

你应该*能够在这里使用某些东西,也许decode

http://docs.python.org/2/library/email.header.html

*我不经常写Python;你的里程可能会有所不同。

答案 2 :(得分:0)

首先,iso-8859-1有许多字符,ansi没有see this。您确定在您的情况下可以安全地忽略所有这些角色吗?我更倾向于另一个想法是iso-8859-1,(某种类型的Unicode,即utf8,utf16等)。以下是来自[SO]的问题的答案,它将进行转换2。 干杯!