Python requests 库怎么对 get 参数的汉字做编码?

2017-03-29 12:07:59 +08:00
 fyooo

比如我想把 苹果 作为 get 参数发送到后台,在浏览器上是可以的,因为浏览器会帮我编码成 %E8%8B%B9%E6%9E%9C,但是 python 的 requests 库就不知道怎么搞了

url_pre =  "http://127.0.0.1/seq?kw="

kws = [
    "苹果"
]

for key in kws:
    r = requests.get(url_pre + key)
    print r

因为运行会提示出错 SyntaxError: Non-ASCII character '\xe6' in file

3173 次点击
所在节点    Python
13 条回复
Mitt
2017-03-29 12:19:14 +08:00
怎么感觉是 python 或者定义字符串的问题 并不是库的问题
jingniao
2017-03-29 12:22:47 +08:00
应该不是这么拼的吧,另外报错是文件编码问题
bxb100
2017-03-29 12:27:00 +08:00
不是 requests 库的问题
Kilerd
2017-03-29 12:40:13 +08:00
> 因为浏览器会帮我编码成 %E8%8B%B9%E6%9E%9C

所以你的问题不就是把文字转换成 URL 编码咯 ?

自己都提出问题了,随手百度都是找得到的吧
mgna17
2017-03-29 12:40:34 +08:00
#coding: utf-8

您可能旧版软件的受害者
Kilerd
2017-03-29 12:41:15 +08:00
善用关键字搜索 “ python 汉字 URL ”

祝你好运。
Deluxe
2017-03-29 12:42:13 +08:00
urllib.parse.quote(key)
xxwar
2017-03-29 12:56:29 +08:00
response = requests.get(url_pre + key)
response.encoding = "gbk"

requests 有时候不能正确识别网页编码
shuax
2017-03-29 13:26:09 +08:00
你可能是 python2 的受害者
ic2y
2017-03-29 13:27:09 +08:00
代码头部 加上这两行

# -*- coding:utf-8 -*-
# coding:utf-8

默认 python 源代码文件不能输入汉字,加上这两行就行了
VicYu
2017-03-29 14:02:41 +08:00
In [1]: import requests

In [2]: requests.utils.quote("中文")
Out[2]: '%E4%B8%AD%E6%96%87'


urllib.urlencode
urllib.quote
urllib.unquote
Kallen
2017-03-29 14:05:30 +08:00
urllib.parse.quote()

反之,还原请求参数用: urllib.parse.unquote()
fyooo
2017-03-29 14:33:06 +08:00
谢谢 #5 @mgna17 #10 @ic2y

加了 coding 就搞定了,我是用 python2 的
# -*- coding:utf-8 -*-
# coding:utf-8

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/351138

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX