use*_*071 10 python encoding urllib utf-8
我正在尝试获取响应urllib并将其解码为可读格式.该文本是希伯来语,也包含像{和的字符/
首页编码是:
# -*- coding: utf-8 -*-
Run Code Online (Sandbox Code Playgroud)
原始字符串是:
b'\xff\xfe{\x00 \x00\r\x00\n\x00"\x00i\x00d\x00"\x00 \x00:\x00 \x00"\x001\x004\x000\x004\x008\x003\x000\x000\x006\x004\x006\x009\x006\x00"\x00,\x00\r\x00\n\x00"\x00t\x00i\x00t\x00l\x00e\x00"\x00 \x00:\x00 \x00"\x00\xe4\x05\xd9\x05\xe7\x05\xd5\x05\xd3\x05 \x00\xd4\x05\xe2\x05\xd5\x05\xe8\x05\xe3\x05 \x00\xd4\x05\xea\x05\xe8\x05\xe2\x05\xd4\x05 \x00\xd1\x05\xde\x05\xe8\x05\xd7\x05\xd1\x05 \x00"\x00,\x00\r\x00\n\x00"\x00d\x00a\x00t\x00a\x00"\x00 \x00:\x00 \x00[\x00]\x00\r\x00\n\x00}\x00\r\x00\n\x00\r\x00\n\x00'
Run Code Online (Sandbox Code Playgroud)
现在我正在尝试使用以下方法解码它:
data = data.decode()
Run Code Online (Sandbox Code Playgroud)
我收到以下错误:
UnicodeDecodeError: 'utf-8' codec can't decode byte 0xff in position 0: invalid start byte
Run Code Online (Sandbox Code Playgroud)
Mar*_*ers 16
你的问题是,这不是UTF-8.您有UTF-16编码数据,解码如下:
>>> data = b'\xff\xfe{\x00 \x00\r\x00\n\x00"\x00i\x00d\x00"\x00 \x00:\x00 \x00"\x001\x004\x000\x004\x008\x003\x000\x000\x006\x004\x006\x009\x006\x00"\x00,\x00\r\x00\n\x00"\x00t\x00i\x00t\x00l\x00e\x00"\x00 \x00:\x00 \x00"\x00\xe4\x05\xd9\x05\xe7\x05\xd5\x05\xd3\x05 \x00\xd4\x05\xe2\x05\xd5\x05\xe8\x05\xe3\x05 \x00\xd4\x05\xea\x05\xe8\x05\xe2\x05\xd4\x05 \x00\xd1\x05\xde\x05\xe8\x05\xd7\x05\xd1\x05 \x00"\x00,\x00\r\x00\n\x00"\x00d\x00a\x00t\x00a\x00"\x00 \x00:\x00 \x00[\x00]\x00\r\x00\n\x00}\x00\r\x00\n\x00\r\x00\n\x00'
>>> data.decode('utf16')
'{ \r\n"id" : "1404830064696",\r\n"title" : "????? ????? ????? ????? ",\r\n"data" : []\r\n}\r\n\r\n'
>>> import json
>>> json.loads(data.decode('utf16'))
{'title': '????? ????? ????? ????? ', 'id': '1404830064696', 'data': []}
Run Code Online (Sandbox Code Playgroud)
如果你从一个网站加载它urllib.request,Content-Type标题应该包含一个charset告诉你的参数; if response是返回的urllib.request响应对象,然后使用:
codec = response.info().get_content_charset('utf-8')
Run Code Online (Sandbox Code Playgroud)
如果未charset设置任何参数,则默认为UTF-8 ,这是JSON数据的相应默认值.
或者,使用requests库加载JSON响应,它自动处理解码(包括特定于JSON响应的UTF编解码器自动检测).
一个进一步注:PEP 263源代码编解码注释是用来唯一解释你的源代码,其中包括字符串常量.它与外部源(文件,网络数据等)的编码无关.
| 归档时间: |
|
| 查看次数: |
32824 次 |
| 最近记录: |