Python文本编码
我有一个文件里面有这段文字 - Recuérdame(注意这是个法语单词)。当我用一个Python脚本读取这个文件时,得到的文字是Recuérdame
。
我把它当作Unicode字符串来读取。我需要找出这个文本的编码是什么,然后解码吗?还是说我的终端在搞鬼?
4 个回答
0
这是HTML,这种结构叫做“实体”。你可以使用
def entity_decode(match):
_, is_hex, entity = match.groups()
base = 16 if is_hex else 10
return unichr(int(entity, base))
print re.sub("(?i)(&#(x?)([^;]+);)",
entity_decode,
"Recurdame")
来解码所有的实体。
补充说明:是的,它们当然不是latin1,现在应该可以处理所有的实体了。
1
这不是一个Unicode字符串。它是用某种编码方式编码的字符串。所以它可能是UTF-8、Latin-1或者其他什么编码。在这个例子中,é
是一个HTML/XML实体,表示的是字母é。这个编码方式在HTML和XML中用来表示非ASCII字符。
如果想把它解码成Unicode,可以看看Fredrik Lundh的方法:http://effbot.org/zone/re-sub.htm#unescape-html
5
是的,你需要知道文本文件的编码方式,这样才能把它转换成unicode字符串,也就是从文件中的字节转换过来。
举个例子,如果你知道编码是UTF-8:
with open('foo.txt', 'rb') as f:
contents = f.read().decode('utf-8-sig') # -sig takes care of BOM if present
不过,你文件里的文本似乎并不是用Unicode编码的;看起来带重音的字符是以XML实体的形式存储的,这个需要手动转换(感谢jleedev提供的链接)。