# -*- coding: utf-8 -*-
import urllib.request as request
import re
url = "http://jjo.kr/users/38281748"
raw_data = request.urlopen(url).read() #Bytes
decoded = raw_data.decode("utf-8")
print(decoded)
我试图获取有关该URL的HTML信息,但收到错误消息。
UnicodeEncodeError:'cp949'编解码器无法在位置2313中编码字符'\ ufeff':非法的多字节序列
我误解了
decode()
功能吗?根据Python 3.5.2标准库解码“返回从给定字节解码的字符串”。
但是我得到了cp949而不是utf-8字符串。
谁能告诉我我的代码有什么问题吗?
最佳答案
您可以通过解码字节字符串来获得unicode字符串。
但是当您尝试打印它时,python使用cp949
编码(因为这是您的stdout编码= sys.stdout.encoding
)\ufeff
(零宽度无间断空格)无法用cp949编码表示。
>>> import unicodedata
>>> unicodedata.name('\ufeff')
'ZERO WIDTH NO-BREAK SPACE'
您可以通过使用
ignore
,replace
错误处理程序进行编码来忽略/替换此类字符。import sys
decoded = raw_data.decode("utf-8")
decoded = decoded.encode(sys.stdout.encoding, 'ignore').decode(sys.stdout.encoding)
print(decoded)