我想从一个url获取html内容,并用正则表达式解析html内容。
但是html内容有一些多字节字符。所以我遇到了标题中描述的错误。
有人能告诉我怎么解决这个问题吗?

最佳答案

您需要编辑您的问题以显示(1)您使用的代码(2)完整错误和回溯(3)涉及的url(4)您试图编码为gbk的unicode字符是什么
您似乎以某种方式从html内容中的原始字节获得了unicode字符--如何?html内容中指定了什么编码?
然后(我猜)您试图将unicode字符写入文件,并将unicode编码为gbk。在这个过程中,出现了如下错误:

>>> u'\uffff'.encode('gbk')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
UnicodeEncodeError: 'gbk' codec can't encode character u'\uffff' in position 0: illegal multibyte sequence
>>>

如果html内容中的原始字节不是用gbk编码的,那么很可能有一些不能用gbk表示的unicode字符。在这种情况下,您可能希望使用原始编码对结果进行编码,或者在可以使用任何unicode字符的gb18030中对结果进行编码。
另一种可能是您以某种方式损坏了原始字节或unicode。我当然希望您的regex处理是在unicode上完成的,而不是在gb2312、gbk等可变长度字符编码上完成的。
更新:
这是您的代码片段:
import sys, urllib.request
url = "http://www.meilishuo.com"
wp = urllib.request.urlopen(url)
content = wp.read()
str_content = content.decode('utf-8')
fp = open("web.txt","w")
fp.write(str_content)
fp.close()

由此我不得不推断:
(1)您正在运行Python 3.x
(2)sys.defaultencoding==“gbk”--否则在前面报告的某个部分中不会得到错误消息。
由于sys.defaultencoding不是'gbk',我用gbk_content = str_content.encode('gbk')替换了最后3行,并用Python 3.1.2运行了修改后的代码片段。
观察:
(1)网站有字符集=utf-8,可以用utf-8解码
(2)错误信息:UnicodeEncodeError: 'gbk' codec can't encode character '\u2764' in position 35070: illegal multibyte sequence
\u2664是一只蝙蝠(沉重的黑心)。网站是动态的;在另一次尝试中,第一个有问题的字符是\xa9(版权标志)。
因此,网页包含未在gbk中映射的Unicode字符。选项包括
(1)使用“gbk”编码,但使用“replace”选项
(2)使用“gbk”编码,但使用“忽略”选项
(3)使用支持所有Unicode字符(utf-8,gb18030)的编码进行编码,并且对于该编码,您有一个显示机制来呈现所有不在gbk中的字符

10-06 08:22