我使用Python的zipfile模块来提取.zip文件,它可以包含带有Unicode文件名的文件。WinZip和7-Zip存档工作正常,但WinRAR对文件名的编码略有不同。假设我创建了一个zip文件,其中包含一个名为"-★-私-“的文件,并使用以下方式解压它:
with zipfile.ZipFile(zip_file_path, 'r') as zf:
zf.extractall(extract_dir)它将"-★-私-“提取为”#U 2605-#U79c1-“。ZipInfo对象的文件名不是编码的,它只是一个包含输出文件名的常规ASCII字符串。
我想将包含Unicode代码点U-2605和U-79C1的字符串转换为有用的、可输出的Unicode字符串。所以我写了这个,但是它不能正确地转换字符:
string = codePoints.replace('#U', '\\u').encode('utf-8')不管怎么说,我哪里错了?如果我这么做了,我就不会得到同样的结果了:
string = '-\u2605-\u79c1-'.encode('utf-8')(假设Python 3;在Python 2中,我会以"u“字符作为前面的字符串的前缀。)
发布于 2014-01-06 20:55:25
我不知道这是不是你想要的:
>>> cp = '#U79c1'
>>> chr(int(cp[2:],16))
'私'例如:
#! /usr/bin/python3
import re
def makeNice(s):
return re.subn('(#U[0-9a-f]{4})', lambda cp: chr(int(cp.groups()[0][2:],16)), s) [0]
a = '-#U2605-#U79c1-'
print(a, makeNice(a))版画
-#U2605-#U79c1- -★-私-https://stackoverflow.com/questions/20959022
复制相似问题