Python(请求)编码问题(UTF-8 - CP1251)

Python (requests) encoding trouble (UTF-8 - CP1251)

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

我猜你正试图显示 cp1251 个字符,但你的编辑器配置为使用 utf8 coding: cp1251 仅供 Python 解释器用于转换源 python 文件中超出 ASCII 范围的字符。尝试:

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'

有两件事。 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