Python:字节到带重音字符的字符串
Python: Bytes to string with accented characters
我 git
读取文件名“ùàèòùèòùùè.txt”作为一个简单的字节串,所以当我向 git 询问提交文件列表时,我得到以下内容字符串:
r"31303032313032313130.txt"
如何使用 Python 2 将其恢复为“ùàèòùèòùùè.txt”?
如果 git
格式包含文字 \ddd
序列(因此每个文件名字节最多 4 个字符),您可以使用 string_escape
(Python 2) 或 unicode_escape
(Python 3) 编解码器 Python 解释转义序列。
您将获得 UTF-8 数据;我的终端设置为直接解释 UTF-8:
>>> git_data = r"31303032313032313130.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"31303032313032313130.txt"
>>> git_data.decode('unicode_escape').encode('latin1').decode('utf8')
'ùàèòùèòùùè.txt'
注意 git_data
是解码前的 bytes
对象。
我 git
读取文件名“ùàèòùèòùùè.txt”作为一个简单的字节串,所以当我向 git 询问提交文件列表时,我得到以下内容字符串:
r"31303032313032313130.txt"
如何使用 Python 2 将其恢复为“ùàèòùèòùùè.txt”?
如果 git
格式包含文字 \ddd
序列(因此每个文件名字节最多 4 个字符),您可以使用 string_escape
(Python 2) 或 unicode_escape
(Python 3) 编解码器 Python 解释转义序列。
您将获得 UTF-8 数据;我的终端设置为直接解释 UTF-8:
>>> git_data = r"31303032313032313130.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"31303032313032313130.txt"
>>> git_data.decode('unicode_escape').encode('latin1').decode('utf8')
'ùàèòùèòùùè.txt'
注意 git_data
是解码前的 bytes
对象。