Python:带有重音字符的字节串

时间:2015-06-17 11:21:47

标签: python unicode encoding python-2.x

git读取文件名“ùàèòùèòùùè.txt”作为一个简单的字节字符串,所以当我向git询问提交文件列表时,我给出了以下字符串:

r"\303\271\303\240\303\250\303\262\303\271\303\250\303\262\303\271\303\271\303\250.txt"

如何使用Python 2 将其恢复为“ùàèòùèòùùè.txt”?

1 个答案:

答案 0 :(得分:2)

如果git格式包含文字\ddd序列(每个文件名字节最多4个字符),则可以使用string_escape(Python 2)或unicode_escape(Python 3)让Python解释转义序列的编解码器。

您将获得UTF-8数据;我的终端设置为直接解释UTF-8:

>>> git_data = r"\303\271\303\240\303\250\303\262\303\271\303\250\303\262\303\271\303\271\303\250.txt"
>>> git_data.decode('string_escape')
'\xc3\xb9\xc3\xa0\xc3\xa8\xc3\xb2\xc3\xb9\xc3\xa8\xc3\xb2\xc3\xb9\xc3\xb9\xc3\xa8.txt'
>>> print git_data.decode('string_escape')
ùàèòùèòùùè.txt

您希望将其解码为UTF-8以获取文字:

>>> git_data.decode('string_escape').decode('utf8')
u'\xf9\xe0\xe8\xf2\xf9\xe8\xf2\xf9\xf9\xe8.txt'
>>> print git_data.decode('string_escape').decode('utf8')
ùàèòùèòùùè.txt

在Python 3中,unicode_escape编解码器为您提供(Unicode)文本,因此需要对Latin-1进行额外编码才能使其再次成为字节:

>>> git_data = rb"\303\271\303\240\303\250\303\262\303\271\303\250\303\262\303\271\303\271\303\250.txt"
>>> git_data.decode('unicode_escape').encode('latin1').decode('utf8')
'ùàèòùèòùùè.txt'

请注意,git_data在解码前是bytes个对象。