python字符串的编解码

python字符串的编解码,python,character-encoding,decode,encode,Python,Character Encoding,Decode,Encode,我有一个html页面列表,其中可能包含某些编码字符。一些例子如下: <a href="mailto:lad%20at%20maestro%20dot%20com"> <em>ada&#x40;graphics.maestro.com</em> <em>mel&#x40;graphics.maestro.com</em> 在某些情况下出现错误。您需要取消浏览HTML实体,并取消URL引用。 标准库提供了和来帮助完成这些任

我有一个html页面列表,其中可能包含某些编码字符。一些例子如下:

<a href="mailto:lad%20at%20maestro%20dot%20com">
<em>ada&#x40;graphics.maestro.com</em>
<em>mel&#x40;graphics.maestro.com</em>

在某些情况下出现错误。

您需要取消浏览HTML实体,并取消URL引用。
标准库提供了和来帮助完成这些任务

import HTMLParser, urllib2

markup = '''<a href="mailto:lad%20at%20maestro%20dot%20com">
<em>ada&#x40;graphics.maestro.com</em>
<em>mel&#x40;graphics.maestro.com</em>'''

result = HTMLParser.HTMLParser().unescape(urllib2.unquote(markup))
for line in result.split("\n"): 
    print(line)

编辑2:
如果您不关心非ASCII字符,可以简化一点:

with open(filename) as fin:
    decoded = fin.read().decode('ascii','ignore')
...

虽然此解决方案看起来不错,但它确实抛出了UnicodeDecodeError:“ascii”编解码器无法解码位置31处的字节0x94:序号不在范围(128)内的错误。请尝试使用.encode('ascii')在输入标记字符串之前,请在标记字符串上输入。@mcenley:如果您发布有关如何获取数据的更多详细信息,我们可以提供编码帮助。@bernie我已下载了一个html页面列表。我该怎么寄给你?不,不,我相信你。我们需要的是用于这些页面的编码,以及您如何读取它们。其原理是输入时解码(到Unicode),输出时编码。
import HTMLParser, urllib2

markup = '''<a href="mailto:lad%20at%20maestro%20dot%20com">
<em>ada&#x40;graphics.maestro.com</em>
<em>mel&#x40;graphics.maestro.com</em>'''

result = HTMLParser.HTMLParser().unescape(urllib2.unquote(markup))
for line in result.split("\n"): 
    print(line)
<a href="mailto:lad at maestro dot com">
<em>ada@graphics.maestro.com</em>
<em>mel@graphics.maestro.com</em>
import codecs 
with codecs.open(filename, encoding="cp1252") as fin:
    decoded = fin.read()
result = HTMLParser.HTMLParser().unescape(urllib2.unquote(decoded))
with codecs.open('/output/file.html', 'w', encoding='cp1252') as fou:
    fou.write(result)
with open(filename) as fin:
    decoded = fin.read().decode('ascii','ignore')
...