1

我有一个 nautilus 脚本,可以将我喜欢的曲调复制到一个特殊的文件夹中,并同步到我的手机和汽车上。它在带有 á 等有趣字符的路径上失败。我正在使用以下内容逐步修复它:

temp = temp.replace('%20', ' ')
temp = temp.replace('%5B', '[')
temp = temp.replace('%5D', ']')

但我已经厌倦了这些创可贴解决方案,而且我确信有更好的方法来做到这一点str.encodeor str.decode

有谁认识这种奇怪的编码以及我如何正确处理它?问题是,例如,我有一个文件夹,例如

/media/music/kálmán balogh and the gipsy cimbalom band/aven shavale

在我的磁盘上,但是当我使用它时os.getenv('NAUTILUS_SCRIPT_CURRENT_URI'),即 nautilus 中当前选择的文件夹,它在 python 中显示为

/media/music/k%C3%A1lm%C3%A1n balogh and the gipsy cimbalom band/aven shavale

然后其他操作(例如重命名或复制文件)不起作用,因为它在磁盘上找不到文件。

4

1 回答 1

2

您正在查看 url 编码。用于urllib.unquote()将这些解释为 UTF-8 编码文本,然后解码为 un​​icode:

>>> import urllib
>>> urllib.unquote('/media/music/k%C3%A1lm%C3%A1n balogh and the gipsy cimbalom band/aven shavale').decode('utf8')
u'/media/music/k\xe1lm\xe1n balogh and the gipsy cimbalom band/aven shavale'
>>> print urllib.unquote('/media/music/k%C3%A1lm%C3%A1n balogh and the gipsy cimbalom band/aven shavale').decode('utf8')
/media/music/kálmán balogh and the gipsy cimbalom band/aven shavale

在 Python 3 中,您需要使用urllib.parse.unquote(); 该功能已移动。

于 2012-12-07T09:27:36.213 回答