使用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
view plaincopy to clipboardprint?
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 = <SPAN style="COLOR: #ff0000">new String(key.getBytes("ISO-8859-1", "utf-8"))</SPAN>;
System.out.println(keyword);
//...
//重定向处理
//res.sendRedirect("http://www.google.com/search?q="+URLEncoder.encode(key , "utf-8"));
}
}
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编码,这样就不会出现乱码现象。
分享到:
相关推荐
分页插件传参问题 在用分页插件进行分页的时候pg:pager中的url只能是一个action连接,那么如果县级下一步需要传另一个action名称的参数,就需要pg:parameter 来设置了.
wx-rss.js 一个轻量级的事件订阅器,主要解决微信小程序跨页面传参问题
主要介绍了关于Python Tkinter Button控件command传参问题的解决方式,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
在主程序与Dll经常传参,参数个的个数、类型不同方法也不同,有没有统一的方法呢? 有!传字典就可以了!这样我只要传一个参数就可以了! Delphi有好用的字典对象吗? 有TStringList+TNamedVariantsList就可以组合成...
个人写的python函数传参值改变的问题脚本,自己学习用的,大家可以拿来参考。 有问题欢迎大家指出。
为什么这个main要传参,要传什么参数?
平时在项目过程中总结了几点关于jsp页面间的传值方法 之前也上传过这样的资源,但其中有些小问题,呵呵,这是经过自己修改过的,想和朋友们一起分享下,也许还有问题,希望朋友们指点噢。
自己写一个多个action之间跳转的小项目,和大家共享下!
无论是window.setTimeout还是window.setInterval,在使用函数名作为调用句柄时都不能带参数,解决办法是在此函数的基础上在做一层封装
主要是解决一下前端使用xlsx-syle插件的一些自定义的属性
主要介绍了Angular 页面跳转时传参问题的相关资料,非常不错,具有参考借鉴价值,需要的朋友可以参考下
birt报表钻取传参方法之beforOpen代码初始化参数
主要介绍了pyMySQL SQL语句传参问题,单个参数或多个参数说明,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
下面小编就为大家分享一篇解决vue-router中的query动态传参问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
关于FastReport传参问题,有需要的朋友可以共同学习学习,内有使用说明及详细的操作步骤
get方式传参中文乱码问题的解决方案
2、稍微修改了一下函数的接口,解决了用C++调用这个matlab函数时参数传参问题。因为该函数用到了varargin,可变参数传参,而C++参数传递都是固定的。 3、代码我自己亲自用opencv调用过,可以使用。 4、如果不用将...