您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

UnicodeEncodeError:'gbk'编解码器无法编码字符:非法的多字节序列

UnicodeEncodeError:'gbk'编解码器无法编码字符:非法的多字节序列

您需要编辑问题以显示(1)您使用的代码(2)完整的错误和回溯(3)涉及的网址(4)您尝试将其 为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
>>>

如果html内容中的原始字节未使用gbk编码,则很有可能您有一些unicode字符无法用gbk表示。在这种情况下,您可能希望使用原始编码对结果进行编码,或者将其编码在gb18030中,该编码可以采用任何unicode字符。

另一种可能性是您以某种方式破坏了原始字节或unicode。我当然希望您的正则表达式是在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’,因此我将最后3行替换为,gbk_content = str_content.encode('gbk')并使用Python 3.1.2运行了经过修改代码段。

观察结果:

(1)网站具有charset = utf-8,用utf-8解码正常 (2)错误消息:UnicodeEncodeError: 'gbk' codec can't encode character '\u2764' in position 35070: illegal multibyte sequence

\u2664是dingbat(HEAVY BLACK HEART)。网站是动态的;在另一种尝试中,第一个令人反感的字符是\ xa9(COPYRIGHT SIGN)。

因此,网页包含未在gbk中映射的Unicode字符。选项是

(1)使用’gbk’编码,但使用’replace’选项 (2)使用’gbk’编码,但使用’ignore’选项 (3)使用支持所有Unicode字符(utf-8,gb18030)的编码和为此,您需要使用一种显示机制来渲染所有不在gbk中的字符

其他 2022/1/1 18:25:04 有688人围观

撰写回答


你尚未登录,登录后可以

和开发者交流问题的细节

关注并接收问题和回答的更新提醒

参与内容的编辑和改进,让解决方法与时俱进

请先登录

推荐问题


联系我
置顶