中文参数传递编码后传递乱码解决(java.net.URLEncoder.encode)
来源:互联网 发布:布丁淘宝客软件好用吗 编辑:程序博客网 时间:2024/06/01 03:58
转载地址: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
- 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=xxxx
- protected 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编码,这样就不会出现乱码现象。
- 中文参数传递编码后传递乱码解决(java.net.URLEncoder.encode)
- 中文参数传递编码后传递乱码解决(java.net.URLEncoder.encode)
- 中文参数传递编码后传递乱码解决(java.net.URLEncoder.encode)
- 中文参数传递编码后传递乱码解决(java.net.URLEncoder.encode)
- 中文参数传递编码后传递乱码解决(java.net.URLEncoder.encode)
- 中文参数传递编码后传递乱码解决
- URLEncoder.encode与URLDecoder.docode传递中文参数编码与解码
- Java 传递参数 中文乱码解决
- 使用response.sendirect("html/employee.html?"+java.net.URLEncoder.encode(param.substri) 重定向传递参数,并隐藏跳转地址
- asp.net如何解决传递中文参数乱码问题
- java.net.URLEncoder.encode编码解码
- java.net.URLEncoder.encode编码解码
- java.net.URLEncoder.encode编码解码
- java 中解决url参数传递中文乱码问题
- 解决JAVA、.NET间WebService传递中文乱码的问题
- 解决url传递中文参数乱码问题
- 解决JS传递中文参数乱码问题
- 中文乱码在java中URLEncoder.encode方法要调用两次解决
- HOG(Histogram of Oriented Gradient)方向梯度直方图
- android 检测该包名所对应的应用是否存在
- Ubuntu下安装配置JDK
- Android HAL 开发 (1)
- div li隔行变色 鼠标悬浮高亮显示 jquery控制css样式
- 中文参数传递编码后传递乱码解决(java.net.URLEncoder.encode)
- linux下eclipse修改快捷键冲突
- GETMODULEHANDLE总是返回null
- Android HAL 开发 (2)
- hdu_1556 Color the ball
- cocos2d-x 全屏播放可以跳过的开场动画mp4
- Android HAL 开发 (3)
- android4.3 自带的权限管理功能
- iBATIS框架的认识