中文参数传递编码后传递乱码解决(java.net.URLEncoder.encode)

来源:互联网 发布:淘宝店铺首页轮播代码 编辑:程序博客网 时间:2024/05/23 19:29

======================================================
注:本文源代码点此下载
======================================================

来源:中文参数传递编码后传递乱码解决(java.net.urlencoder.encode)

使用java.net.urlencoder.encode()可以对要传递的中文进行编码

a.在传参数之前先把参数进行转码:java.net.urlencoder.encode(param);

取值时用语句java.net.urldecoder.decode(param);再转回中文

b.在你的tomcat目录-->conf目录-->server.xml里找出这段:

uriencoding="gb2312"

/>

简单示例程序如下:

">点击这里

jsp经过上面的处理之后,最后输出的html页面联结已经可以正常向服务器传递中文参数了。

下面我们阐述一下servlet里怎么接收/解析中文参数。

对于href="/someservlet?key=%e4%bd%a0%e5%a5%bd">你好之类的联结,我们可以用下面的servlet来解析传递过来的中文参数。

getasiacharservlet.java

import java.io.ioexception; import java.net.urlencoder; import javax.servlet.servletexception; import javax.servlet.http.httpservlet; import javax.servlet.http.httpservletrequest; import javax.servlet.http.httpservletresponse; public class getasiacharservlet extends httpservlet {@override//redir?key=xxxxprotected void doget(httpservletrequest req, httpservletresponse res) throws servletexception, ioexception {string key = req.getparameter("key");key = new string(key.getbytes("iso-8859-1", "utf-8"));system.out.println(keyword);//...//重定向处理//res.sendredirect("http://www.google.com/search?q="+urlencoder.encode(key, "utf-8"));} }

我们注意到使用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编码,这样就不会出现乱码现象。


======================================================
在最后,我邀请大家参加新浪APP,就是新浪免费送大家的一个空间,支持PHP+MySql,免费二级域名,免费域名绑定 这个是我邀请的地址,您通过这个链接注册即为我的好友,并获赠云豆500个,价值5元哦!短网址是http://t.cn/SXOiLh我创建的小站每天访客已经达到2000+了,每天挂广告赚50+元哦,呵呵,饭钱不愁了,\(^o^)/