【问题标题】:Python (requests) encoding trouble (UTF-8 - CP1251)Python(请求)编码问题(UTF-8 - CP1251)
【发布时间】:2017-04-24 07:27:57
【问题描述】:

我试图用requests 像这样的python 扩展来获取这种URL http://example.com/?param=%DD%CC%C0-15

group = "ЭМА-15".encode('cp1251')
r = requests.get('http://example.com/?param=' + group)
r.encoding = "cp1251"

(因为站点使用 windows-1251 (cp1251) 编码)

在第 2 行出现错误:UnicodeDecodeError: 'utf8' codec can't decode byte 0xdd in position 82: invalid continuation byte 但是这个字节序列 (0xDD (%DD)...) 正是我所需要的。 我该如何解决?

【问题讨论】:

  • 请看我的回答。

标签: python encoding utf-8 python-requests cp1251


【解决方案1】:

有两件事。 1. Python解释器需要知道源码中“ЭМА-15”字符串的编码 2.查询参数一般由requests处理,但由于是手动构建URL,最好自己引用。

# -*- coding: utf-8 -*-
import urllib
import requests

group = u"ЭМА-15".encode('cp1251')
param = urllib.quote_plus(group)
print(param)
r = requests.get('http://example.com/?param=' + param)

输出

%DD%CC%C0-15

【讨论】:

  • 我一直在等待这样的答案。非常感谢。
【解决方案2】:

我猜您正在尝试显示 cp1251 字符,但您的编辑器配置为使用 utf8 coding: cp1251 仅由 Python 解释器用于转换来自 ASCII 范围之外的源 Python 文件的字符。试试:

group = "ЭМА-15".decode('utf8').encode('cp1251')
r = requests.get('http://example.com/?param=' + group)
r.encoding = "cp1251"

当我在终端上运行时,

>>> "ЭМА-15".decode('utf8').encode('cp1251')
'\xdd\xcc\xc0-15'

【讨论】:

  • 不,打印成功,问题出在请求函数上
猜你喜欢
  • 1970-01-01
  • 2010-12-01
  • 1970-01-01
  • 1970-01-01
  • 2018-02-18
  • 1970-01-01
相关资源
最近更新 更多