python - 如何解码这个表示为 unicode 的字符串?
问题描述
我s
在尝试通过可读性解析网页时得到(Windows 10 上的 Python 2.7,Sublime Text 2/cmd)
>>> import requests
>>> from readability import Document
>>>
>>> response = requests.get('http://www.gamersky.com/news/201806/1064930.shtml')
>>> doc = Document(response.text.encode("utf-8"))
>>> print doc.title()
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
UnicodeEncodeError: 'gbk' codec can't encode character u'\xe3' in position 0: illegal multibyte sequence
>>> print doc.title().encode("utf-8")
lots of messy codes
>>> print doc.title().encode("utf-16")
lots of messy codes
>>> print doc.title().encode("gbk")
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
UnicodeEncodeError: 'gbk' codec can't encode character u'\xe3' in position 0: illegal multibyte sequence
我发现我永远无法打印出来doc.title()
,所以我doc.title()
通过运行查看
s = repr(doc.title())
print type(doc.title())
print s
结果很奇怪
<type 'unicode'>
u'\xe3\x80\x8a\xe5\xa5\x87\xe5\xbc\x82\xe4\xba\xba\xe7\x94\x9f\xe3\x80\x8b\xe5\x9b\xa2\xe9\x98\x9f\xe6\x96\xb0\xe4\xbd\x9c\xe3\x80\x8a\xe8\xb6 \xe8\x83\xbd\xe9\x98\x9f\xe9\x95\xbf\xe3\x80\x8b\xe5 \x8d\xe8\xb4\xb9\xe4\xb8\x8b\xe8\xbd\xbd \xe5\xb0\x8f\xe7\x94\xb7\xe5\xad\xa9\xe7\x9a\x84\xe8\x8b\xb1\xe9\x9b\x84\xe6\xa2\xa6\xe6\x83\xb3 _ \xe6\xb8\xb8\xe6\xb0\x91\xe6\x98\x9f\xe7\xa9\xba GamerSky.com'
似乎s
实际上是用多字节编码的,因为当我运行时
print '\xe3\x80...'
它打印
《奇异人生》团队新作《? 能队长》? ?费下载 小男孩的英雄梦想 _ 游民星空 GamerSky.com
准确的标题在哪里
《奇异人生》团队新作《超能队长》免费下载 小男孩的英雄梦想 _ 游民星空 GamerSky.com
尽管仍然缺少一些字符,但结果使我相信\xe3
不应将其表示为 unicode 形式。经过一番搜索,我发现以下代码有所帮助,但仍有一些字符缺失。
>>> print s.encode("raw_unicode_escape")
《奇异人生》团队新作《? 能队长》? ?费下载 小男孩的英雄梦想 _ 游民星空 GamerSky.com
我的问题是:
为什么这个问题可能会发生?解决方案是否
encode("raw_unicode_escape")
整洁?当我运行以下代码时,它可以工作>>> import requests >>> from readability import Document >>> >>> response = requests.get('https://zh.wikipedia.org/wiki/Wikipedia:%E9%A6%96%E9%A1%B5') >>> doc = Document(response.text.encode("utf-8")) >>> print doc.title() 维基百科,自由的百科全书
如何处理丢失的字符?
解决方案
尝试使用response.content
前任:
>>> import requests
>>> from readability import Document
>>>
>>> response = requests.get('http://www.gamersky.com/news/201806/1064930.shtml')
>>> doc = Document(response.content)
>>> print doc.title()
推荐阅读
- spotfire - 在 spotfire dxp 的 URL 中插入 Document 属性
- flutter - Flutter 帮助 - 从 Stream 中检索用户属性
- ruby - Ruby 的 ruport NoMethodError(main:Object 的未定义方法“表”)
- python - ModuleNotFoundError:Windows 10 上没有名为“caffe._caffe”的模块
- python - 熊猫中的子字符串函数
- python - 尝试将新词添加到 WordSegment 字典时出错:模块“wordsegment”没有属性“bigram_counts”
- javascript - 切换到图库中的下一个视频时如何使 HTML 视频暂停播放
- ios - Cordova ios 应用程序在使用 stripe/v3 时自动重定向到 js.stripe.com
- javascript - 在自定义元素中附加自定义元素会导致隐藏元素
- curl - 使用 Python 请求从 data.world 下载 covid 数据集