0

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

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)...) 正是我需要的。我该如何解决?

4

2 回答 2

1

我猜您正在尝试显示cp1251字符,但您的编辑器配置为使用utf8 Thecoding: 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'
于 2016-12-08T22:30:42.407 回答
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
于 2016-12-08T22:36:38.887 回答