首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Python文本编码

Python文本编码
EN

Stack Overflow用户
提问于 2010-12-16 06:34:53
回答 4查看 3.9K关注 0票数 0

我把这个文本放在一个文件中- Recuérdame (注意它是一个法语单词)。当我用python脚本读取这个文件时,我将这个文本作为Recuérdame.

我把它读成了unicode字符串。我是否需要找到文本的编码并对其进行解码?还是我的终端机在捉弄我?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2010-12-16 06:38:23

是的,您需要知道将文本文件转换为unicode字符串的编码方式(来自组成该文件的字节)。

例如,如果您知道编码是UTF-8:

代码语言:javascript
复制
with open('foo.txt', 'rb') as f:
    contents = f.read().decode('utf-8-sig')   # -sig takes care of BOM if present

但是,文件中的文本似乎不是编码的Unicode;重音字符显然是作为一个XML实体存储的,它必须是converted manually (链接对jleedev的提示)。

票数 5
EN

Stack Overflow用户

发布于 2010-12-16 06:46:35

它不是Unicode字符串。它是一个字符串,不管它是用什么编码的。因此,它是一个UTF-8或拉丁-1或其他什么字符串。在本例中,&#xE9是一个具体表示é的HTML实体。它是HTML和XML中用来编码非ascii数据的编码。

要将其解码为Unicode,请查看Fredrik方法:http://effbot.org/zone/re-sub.htm#unescape-html

票数 1
EN

Stack Overflow用户

发布于 2010-12-16 06:46:07

它是HTML,这个构造被称为“实体”。您可以使用

代码语言:javascript
复制
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,现在它应该与所有实体一起工作。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4458090

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档