【发布时间】:2015-05-15 05:43:07
【问题描述】:
我正在尝试使用 gunicorn 发送一个 utf-8 编码的字符串,这是 bz2 压缩的结果,作为对获取请求的响应。
这是我在 gunicorn 服务器端的代码:
def app(environ, start_response):
data = "Hello, World!" * 10
compressed_data = bz2.compress(data)
start_response("200 OK", [("Content-Type", "text/plain"),
('charset', 'utf-8'),
("Content-Length", str(len(compressed_data))),
('Access-Control-Allow-Headers', '*'),
('Access-Control-Allow-Origin', '*'),
# ('Content-Transfer-Encoding', 'BASE64'),
])
return iter([compressed_data])
当我尝试使用这样的 Python 请求包从客户端获取请求时
import bz2
import requests
res = requests.get('http://127.0.0.1:8000')
bz2.decompress(res.text)
它引发了一个异常
UnicodeEncodeError: 'ascii' codec can't encode character u'\xab' in position 11: ordinal not in range(128)
说无法解码响应 尝试打印响应文本时
print(res.text)
>>u'BZh91AY&SYy\xabm\x99\x00\x00\x13\x97\x80`\x04\x00@\x00\x80\x06\x04\x90\x00 \x00\xa5P\xd0\xda\x10\x03\x0e\xd3\xd4\xdai4\x9bO\x93\x13\x13\xc2b~\x9c\x17rE8P\x90y\xabm\x99'
打印编码文本时
import bz2
print(bz2.compress("Hello, World!" * 10))
>> 'BZh91AY&SYy\xabm\x99\x00\x00\x13\x97\x80`\x04\x00@\x00\x80\x06\x04\x90\x00 \x00\xa5P\xd0\xda\x10\x03\x0e\xd3\xd4\xdai4\x9bO\x93\x13\x13\xc2b~\x9c\x17rE8P\x90y\xabm\x99'
唯一的区别是 unicode 符号,我通过在客户端调整数据以使响应字符串可解码来解决此问题,但我想知道如何在服务器端解决此问题?
【问题讨论】:
标签: python python-2.7 unicode gunicorn