在做页面开发时使用了Javascript的escape()函数进行URL编码,结果在JSP或Servlet中用request.getParameter()时取不到参数,只返回一个空值。经过Baidu的搜索终于找到了问题所在及解决的办法。
本来Javascript中的escape()是将中文按ISO-8859-1字符集进行URL编码的,那样通过 request.getParameter()是能直接获取到请求参数的,但后来的Javascript将escape()换成了Unicode字符集编 码,如此一来,在JSP和Servlet中就没法直接拿到请求参数了,具体原因我也不知道。
解决办法:
1、首先对中文字符进行两次escape()编码,如要传参数name,值为“你好”,则url的格式为....name=escape(escape("你好")),这样一来,在request.getParameter()就能取到编码后的参数了。
2、由于取到的参数是 %25u4F60%25u597D 格式的,没法用常规的URLDecoder.decode()来进行解码,还好,这世上的牛人够多,在网上直接找到了一个工具类,能实现 Javascript中escape()及unescape()式的编解码,源代码如下:

public
class
Escape
...
{

private
final
static
String[] hex
=
...
{
"
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
"
,
"
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
"
,
"
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
"
,
"
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
"
,
"
FF
"
}
;

private
final
static
byte
[] val
=
...
{
0x3F
,
0x3F
,
0x3F
,
0x3F
,
0x3F
,
0x3F
,
0x3F
,
0x3F
,
0x3F
,
0x3F
,
0x3F
,
0x3F
,
0x3F
,
0x3F
,
0x3F
,
0x3F
,
0x3F
,
0x3F
,
0x3F
,
0x3F
,
0x3F
,
0x3F
,
0x3F
,
0x3F
,
0x3F
,
0x3F
,
0x3F
,
0x3F
,
0x3F
,
0x3F
,
0x3F
,
0x3F
,
0x3F
,
0x3F
,
0x3F
,
0x3F
,
0x3F
,
0x3F
,
0x3F
,
0x3F
,
0x3F
,
0x3F
,
0x3F
,
0x3F
,
0x3F
,
0x3F
,
0x3F
,
0x3F
,
0x00
,
0x01
,
0x02
,
0x03
,
0x04
,
0x05
,
0x06
,
0x07
,
0x08
,
0x09
,
0x3F
,
0x3F
,
0x3F
,
0x3F
,
0x3F
,
0x3F
,
0x3F
,
0x0A
,
0x0B