# -*- 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'


您可以通过使用ignorereplace错误处理程序进行编码来忽略/替换此类字符。

import sys

decoded = raw_data.decode("utf-8")
decoded = decoded.encode(sys.stdout.encoding, 'ignore').decode(sys.stdout.encoding)
print(decoded)

09-25 17:39