URL编码表一览
æ
退格
TAB
换行
回车
空格
!
"
#
$
%
&
'
(
)
*
+
,
-
.
/
%00
%01
%02
%03
%04
%05
%06
%07
%08
%09
%0a
%0b
%0c
%0d
%0e
%0f
%10
%11
%12
%13
%14
%15
%16
%17
%18
%19
%1a
%1b
%1c
%1d
%1e
%1f
%20
%21
%22
%23
%24
%25
%26
%27
%28
%29
%2a
%2b
%2c
%2d
%2e
%2f
0
1
2
3
4
5
6
7
8
9
:
;
<
=
>
?
@
A
B
C
D
E
F
G
H
I
J
K
L
M
N
O
P
Q
R
S
T
U
V
W
X
Y
Z
[
\
]
^
_
%30
%31
%32
%33
%34
%35
%36
%37
%38
%39
%3a
%3b
%3c
%3d
%3e
%3f
%40
%41
%42
%43
%44
%45
%46
%47
%48
%49
%4a
%4b
%4c
%4d
%4e
%4f
%50
%51
%52
%53
%54
%55
%56
%57
%58
%59
%5a
%5b
%5c
%5d
%5e
%5f
`
a
b
c
d
e
f
g
h
i
j
k
l
m
n
o
p
q
r
s
t
u
v
w
x
y
z
{
|
}
~
€
‚
ƒ
„
乧
侕
侖
ˆ
侎
Š
‹
Œ
丒br>
%60
%61
%62
%63
%64
%65
%66
%67
%68
%69
%6a
%6b
%6c
%6d
%6e
%6f
%70
%71
%72
%73
%74
%75
%76
%77
%78
%79
%7a
%7b
%7c
%7d
%7e
%7f
%80
%81
%82
%83
%84
%85
%86
%87
%88
%89
%8a
%8b
%8c
%8d
%8e
%8f
乪
乫
乬
乭
•
–
—
˜
™
š
›
œ
丒br>Ÿ
¡
¢
£
\
|
仒
丯
©
ª
«
¬
¯
®
¯
亱
亇
²
³
丩
µ
侘
·
¸
¹
º
»
¼
½
¾
¿
%90
%91
%92
%93
%94
%95
%96
%97
%98
%99
%9a
%9b
%9c
%9d
%9e
%9f
%a0
%a1
%a2
%a3
%a4
%a5
%a6
%a7
%a8
%a9
%aa
%ab
%ac
%ad
%ae
%af
%b0
%b1
%b2
%b3
%b4
%b5
%b6
%b7
%b8
%b9
%ba
%bb
%bc
%bd
%be
%bf
À
Á
Â
Ã
Ä
Å
Æ
Ç
È
É
Ê
Ë
Ì
Í
Î
Ï
Ð
Ñ
Ò
Ó
Ô
Õ
Ö
Ø
Ù
Ú
Û
Ü
Ý
Þ
ß
à
á
â
ã
ä
å
æ
ç
è
é
ê
ë
ì
í
î
ï
%c0
%c1
%c2
%c3
%c4
%c5
%c6
%c7
%c8
%c9
%ca
%cb
%cc
%cd
%ce
%cf
%d0
%d1
%d2
%d3
%d4
%d5
%d6
%d7
%d8
%d9
%da
%db
%dc
%dd
%de
%df
%e0
%e1
%e2
%e3
%e4
%e5
%e6
%e7
%e8
%e9
%ea
%eb
%ec
%ed
%ee
%ef
ð
ñ
ò
ó
ô
õ
ö
亐
ø
ù
ú
û
ü
ý
þ
ÿ
%f0
%f1
%f2
%f3
%f4
%f5
%f6
%f7
%f8
%f9
%fa
%fb
%fc
%fd
%fe
以下8个特殊字符URL编码没有对其进行转码
十六进制值
1.
+
URL 中+号表示空格
%2B
2.
空格
URL中的空格可以用+号或者编码
%20
3.
/
分隔目录和子目录
%2F
4.
?
分隔实际的 URL 和参数
%3F
5.
%
指定特殊字符
%25
6.
#
表示书签
%23
7.
&
URL 中指定的参数间的分隔符
%26
8.
=
URL 中指定参数的值
%3D
URL转码方法 var str = encodeURI(str);(此方法为JavaScript的)
备注:
python:
#!/usr/bin/python
# -*- coding: UTF-8 -*-
import hashlib
import collections
import urllib
def md5(ss):
m = hashlib.md5()
m.update(ss)
return m.hexdigest()
params = collections.OrderedDict()
a = "test 1"
# a = a.replace(" ", "") # 不去掉空格
params['reg'] = a
pstr = ''
for key, val in params.items():
pstr += key + "=" + str(val)
print pstr
pstr = urllib.quote(pstr.encode('utf-8'))
print pstr
sign = md5(pstr)
print sign
输出:
reg=test 1
reg%3Dtest%201
ba22339e5c14a5ed05592474648983b2
java:
import java.io.UnsupportedEncodingException;
import java.net.URLEncoder;
import java.security.MessageDigest;
public class Md5Util {
private static MessageDigest md5 = null;
static {
try {
md5 = MessageDigest.getInstance("MD5");
} catch (Exception e) {
System.out.println(e.getMessage());
}
}
/**
* 用于获取一个String的md5值
*
* @param string
* @return
*/
public static String getMd5(String str) {
byte[] bs = md5.digest(str.getBytes());
StringBuilder sb = new StringBuilder(40);
for (byte x : bs) {
if ((x & 0xff) >> 4 == 0) {
sb.append("0").append(Integer.toHexString(x & 0xff));
} else {
sb.append(Integer.toHexString(x & 0xff));
}
}
return sb.toString();
}
public static void main(String[] args) throws UnsupportedEncodingException {
StringBuilder sb = new StringBuilder();
String a = "test 1";
// a = a.replace(" ", ""); // 不去掉空格
sb.append("reg=").append(a);
System.out.println(sb);
String encoded = URLEncoder.encode(sb.toString(), "UTF-8");
System.out.println(encoded);
String md5Sign = getMd5(encoded);
System.out.println(md5Sign);
}
}
输出:
reg=test 1
reg%3Dtest+1
9c4ba428cc77a7aa00bbcffab108823d
url里面URL编码没有对空格其进行转码,所有造成了请求的参数不一致,md5更加不一致。
解决办法:
1.replace去掉空格(把注释去掉),或者替换为别的字符。
输出为:
python:
reg=test1
reg%3Dtest1
5320493f76fe3c392b8d7b2866da1948
java:
reg=test1
reg%3Dtest1
5320493f76fe3c392b8d7b2866da1948
字符正常了。所以用url传输数据时候,需要把那8个+、空格、/、?、%、#、&、=在python和java中replace替换掉,以保证encode一致,如果需要MD5的sign验证的,需要注意这几个字符。
python