在传参数之前先把参数进行转码:java.net.URLEncoder.encode("utf-8");
取值时用语句java.net.URLDecoder.decode("utf-t");
我们注意到使用req.getParameter("key")得到参数后,还使用了new String(key.getBytes("ISO-8859-1", "utf-8"))把ISO-8859-1字符集形式转换成UTF-8形式。
为什么呢?因为iso-8859-1是Java中网络传输使用的标准字符集,req.getParameter("key")得到的还是ISO-8859-1字符集,所以要转换一下才不会是乱码。
最后,顺便提一下,采用servlet重定向时,也需要对包含中文文字的参数做特殊处理。
例如,SERVLET从HTML页面的联结接受参数,然后重新定向到Google搜索。
则可以在上面的GetAsiaCharServlet里加上如下处理:
res.sendRedirect("http://www.google.com/search?q="+URLEncoder.encode(key, "utf-8"));
也就是说,需要把参数取出来,转换,再重新使用URLEncoder.encode编码,这样就不会出现乱码现象