转译中文是‘激战2’,在python里如何将字符串‘激战2’转换为‘%E6%BF%80%E6%88%982’。
1
clijiac 2015-07-12 19:05:42 +08:00
base64吧
|
3
BraveRBT 2015-07-12 19:06:27 +08:00
|
4
BraveRBT 2015-07-12 19:08:42 +08:00
举个栗子
urllib.urlencode({"逆战2":"hehe "}) |
5
dangge 2015-07-12 19:09:20 +08:00 1
|
6
lerry 2015-07-12 19:10:17 +08:00
import urllib
print urllib.unquote("%E6%BF%80%E6%88%982") >>激战2 |
8
lerry 2015-07-12 19:11:25 +08:00
print urllib.quote("激战2")
>>%E6%BF%80%E6%88%982 |
10
blank4me 2015-07-12 19:32:47 +08:00
貌似就叫做url encode?本质而言是UTF-8。“激”的UTF-8是E6 BF 80。
|
11
ciba1990 OP django报错 KeyError at /search/
u'\u6fc0' 代码: url='http://tieba.baidu.com/f?ie=utf-8&kw=%s&fr=search' % quote(“激战2”) html=urllib2.urlopen(url).read() soup = BeautifulSoup(html) 如果url=’http://tieba.baidu.com/f?ie=utf-8&kw=%E6%BF%80%E6%88%982&fr=search‘却又可以。 @lerry @dangge @BraveRBT |
12
anthonyeef 2015-07-12 20:21:23 +08:00
@dangge 你的笔记打不开
|
13
ciba1990 OP 刚才代码打错了
url='http://tieba.baidu.com/f?ie=utf-8&kw=%s&fr=search' % quote(request.GET.get('q','')) html=urllib2.urlopen(url).read() soup = BeautifulSoup(html) 上面打的那个代码是可以运行的。request.GET.GET('q','')获取的就是"激战2“,不知道哪里的问题。 |
14
skywatcher 2015-07-12 20:54:33 +08:00
@ciba1990 不应该啊,百度的gbk和utf8编码都可以访问啊,“激战2”的gbk的quote是`%BC%A4%D5%BD2`, utf8的quote是`%E6%BF%80%E6%88%982`
http://tieba.baidu.com/f?ie=utf-8&kw=%BC%A4%D5%BD2&fr=search http://tieba.baidu.com/f?ie=utf-8&kw=%E6%BF%80%E6%88%982&fr=search 这两个都是能访问的,你把urlprint出来看看哪里不一样 |
15
ciba1990 OP @skywatcher
就是URL报错, /home/mysite/search/views.py in index url='http://tieba.baidu.com/f?ie=utf-8&kw=%s&fr=search' % quote(request.GET.get('q','')) ... ▶ Local vars /usr/lib/python2.7/urllib.py in quote return ''.join(map(quoter, s)) ... ▶ Local vars |
16
ciba1990 OP @skywatcher 英文没问题 中文报错
|
17
dangge 2015-07-12 21:46:46 +08:00
@anthonyeef 吓到了 V2过来的流量太大了...
本来是放在一个小服务商的机器上,现在迁移了一下... |
19
ciba1990 OP @skywatcher 解决了 3Q
|
23
jsq2627 2015-07-13 12:13:42 +08:00 2
@dangge 你把 Unicode,UTF-8,URL编码独立开来写有一定误导性
Unicode只规定了字符到码点的对应,没有规定存储形式。UTF-8/UTF-16/UTF-32是它的几种存储形式。URL Encoding 没有规定用什么编码,它只是把二进制用字符串表现出来了。笔记里最后提到的“unicode编码”实际是UTF-16的字符串表现。 |
24
caomaocao 2015-07-13 14:20:07 +08:00
utf-8或者Gbk吧 用url.unqote把%装成/x先出来先
|
25
aprikyblue 2015-07-13 17:24:49 +08:00 1
@dangge
+ base64最后两位不一定是等号,可能没有,也可能有一个或两个。 编码时最后不足3字节的,用0填充补位,再用等号表示0,才出现了这种现象。 + 我对编码没有仔细深究,但我认为把(UTF-8)、(unicode)与(MD5、base64、urlencode)并列在一起不正确,并不是一个层面上的东西。 MD5、base64、urlencode 是encoding unicode 是charset,utf-8则是unicode在计算机中的一种具体存储方法。 有的人把charset和encoding混淆,特别是用中文都说作编码的情况下很容易就。。 urlencode 确实是%xx的形式,但是其只是指定了表现形式,没有具体指定是用哪一种charset(unicode或是gbk),因此用不同的charset进行urlencode会有不同的结果。 \uxxxx 是unicode转义字符,当然使用unicode,其中xxx是十六进制 &#xxx; 是HTML转义字符,资料上说是使用lantin-1,不过unicode貌似也可以?xxx是十进制 善用搜索 |
26
xujiaze 2015-07-13 21:25:15 +08:00
四楼 url加密。。其实没啥用,我个人的站都是先encode关键词,好像能防SQL注入。翻译还是很麻烦的,其实你自己进入http://www.baidu.com/?s=转义字符 就会告诉你是什么了。
|