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

转载地址:http://blog.csdn.net/wjtzlj/article/details/4128790

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

a.在传参数之前先把参数进行转码:java.net.URLEncoder.encode(param);
取值时用语句java.net.URLDecoder.decode(param);再转回中文
b.在你的Tomcat目录-->conf目录-->server.xml里找出这段:
       <Connector 
         port="8080"               maxThreads="150" minSpareThreads="25" maxSpareThreads="75"
               enableLookups="false" redirectPort="8443" acceptCount="100"
               debug="0" connectionTimeout="20000" 
               disableUploadTimeout="true"
<!--在里边加上这个参数-->
URIEncoding="gb2312"
     />

简单示例程序如下:

<%@ page contentType="text/html;charset=gb2312" %>

<a href="ds.jsp?url=<%=java.net.URLEncoder.encode("编码的是这里","GB2312")%>">点击这里</a>


<%
//request.setCharacterEncoding("GBK");
if(request.getParameter("url")!=null)  {

str=request.getParameter("url");
str=java.net.URLDecoder.decode(str,"GB2312");
str=new String(str.getBytes("ISO-8859-1"));
out.print(str);
}

%>

 

JSP经过上面的处理之后,最后输出的HTML页面联结已经可以正常向服务器传递中文参数了。
下面我们阐述一下Servlet里怎么接收/解析中文参数
对于<a href="/someServlet?key=%E4%BD%A0%E5%A5%BD">你好</a>之类的联结,我们可以用下面的servlet来解析传递过来的中文参数
GetAsiaCharServlet.java

[java]  view plain copy
  1. import java.io.IOException;  
  2. import java.net.URLEncoder;  
  3.   
  4. import javax.servlet.ServletException;  
  5. import javax.servlet.http.HttpServlet;  
  6. import javax.servlet.http.HttpServletRequest;  
  7. import javax.servlet.http.HttpServletResponse;  
  8.   
  9. public class GetAsiaCharServlet extends HttpServlet {  
  10.         
  11.             
  12.       @Override  
  13.       //redir?key=xxxx  
  14.       protected void doGet(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException {  
  15.           String key = req.getParameter("key");  
  16.             
  17.           key = new String(key.getBytes("ISO-8859-1""utf-8"));  
  18.             
  19.         System.out.println(keyword);  
  20.       //...  
  21.   
  22.       //重定向处理  
  23.       //res.sendRedirect("http://www.google.com/search?q="+URLEncoder.encode(key, "utf-8"));  
  24.       }  
  25. }  



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


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值