Python UnicodeEncodeError:&x27;gbk';编解码器可以';t编码字符:非法的多字节序列

Python UnicodeEncodeError:&x27;gbk';编解码器可以';t编码字符:非法的多字节序列,python,unicode,encode,Python,Unicode,Encode,我想从url获取html内容,并用正则表达式解析html内容。 但是html内容有一些多字节字符。所以我遇到了标题中描述的错误 有人能告诉我如何解决这个问题吗?您需要编辑您的问题,以显示(1)您使用的代码(2)完整的错误和回溯(3)涉及的url(4)您试图将unicode编码为gbk的字符是什么 您似乎以某种方式从html内容的原始字节中获得了unicode字符——如何获得?html内容中指定了什么编码 然后(我猜)您正在尝试将unicode字符写入文件,并将unicode编码为gbk。在此过程

我想从url获取html内容,并用正则表达式解析html内容。 但是html内容有一些多字节字符。所以我遇到了标题中描述的错误


有人能告诉我如何解决这个问题吗?

您需要编辑您的问题,以显示(1)您使用的代码(2)完整的错误和回溯(3)涉及的url(4)您试图unicode编码为gbk的字符是什么

您似乎以某种方式从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
>>>
我不得不从中推断:
(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) 错误消息:
unicodeincoder错误:“gbk”编解码器无法对35070位置的字符“\u2764”进行编码:非法的多字节序列

\u2664
是一颗沉重的黑心。网站是动态的;在另一次尝试中,第一个违规字符是\xa9(版权标志)

因此,网页包含未映射为gbk的Unicode字符。选择是

(1) 使用“gbk”编码,但使用“替换”选项
(2) 使用“gbk”编码,但使用“忽略”选项
(3) 使用支持所有Unicode字符(utf-8、gb18030)的编码进行编码,并且您有一个显示机制来呈现所有不在gbk中的字符

open(file, 'r', encoding='utf-8')
而不是

open(file, 'r')

结合以上答案,我发现下面的代码工作得非常好

import requests
r = requests.get("https://www.example.com/").content
str_content = r.decode('utf-8')
fp = open("contents.txt","w", encoding='utf-8')
fp.write(str_content)
fp.close()

@用户351637:请编辑您的问题;不要把这些信息放在评论里。我试着用选项编码,两种都对。首先,使用utf-8解码,然后使用替换或忽略选项使用gbk编码,最后使用gbk.Re解码。使用正则表达式解析html内容:请看:@Alan Moore,@Vinay Sajip:问题与html或正则表达式无关——它原来是一个简单的Unicode编码问题。我正在编辑标签以反映这一点。
import requests
r = requests.get("https://www.example.com/").content
str_content = r.decode('utf-8')
fp = open("contents.txt","w", encoding='utf-8')
fp.write(str_content)
fp.close()