目前在jsp页面中传递中文参数主要有两种方式
URL方式例如桔子¶m=%D%B
FORM方式例如
<form name=test mehtod="post">
<input type=hidden name=text value="中文">
<input type=text name=text>
<input type=submit value=submit>
</form>
下面针对这两种情况分别提供中文正确传递的解决方法
方式URL方式
例如桔子¶m=%D%B
一般来说我们很少直接在URL里面把参数写成中文如例子中的"type=桔子"这样传递如果出现这种情况在我们的接收参数的页面我们只需要做个简单的转换就可以了
代码testjsp(主要部分)
<%@ page language="java" import="javautil*" pageEncoding="gb"%>
<%
String type = requestgetParameter("type");
String result = new String(typegetBytes("iso") "gb");
outprintln(result);
%>
还有更普遍的做法是对url中的中文字符进行编码变成类似type=%D%B这样的字符
代码MyJspjsp
<%@ page language="java" import="javautil*" pageEncoding="gb"%>
<%@ page import="javanet*" %>
<a href=’/MyJspjsp?act=<%=URLEncoderencode("北京人 非常好 =")%>’>test</a>
代码MyJspjsp:
<%@ page language="java" import="javautil*" pageEncoding="gb"%>
<%@ page import="javanet*" %>
String tempVal = URLDecoderdecode(requestgetParameter("act"));
outprintln(new String(tempValgetBytes("ISO") "gb"));
方式FORM方式
注意我们只是讨论在<form enctype="application/xwwwformurlencoded" >这种形式的中文情况因为在enctype="multipart/formdata"的时候通过解析出来中文也可以运用这种方法进行字符转化所以不再重复讨论
<form method=post>这种情况最简单
代码MyJspjsp:
<%@ page language="java" import="javautil*" pageEncoding="gb"%>
<form action="/MyJspjsp" method="post" enctype="application/xwwwformurlencoded" >
<input type=hidden name=act value=动作 />
<input type=submit value=ok>
</form>
代码MyJspjsp:
<%@ page language="java" import="javautil*" pageEncoding="gb"%>
requestsetCharacterEncoding("gb");
outprintln(requestgetParameter("act"));
或者
<%@ page language="java" import="javautil*" pageEncoding="gb"%>
String tempVal = requestgetParameter("act");
outprintln(new String(tempValgetBytes("ISO") "gb"));
<form method=get>情况 代码MyJspjsp:
<%@ page language="java" import="javautil*" pageEncoding="gb"%>
<form action="/MyJspjsp" method="get" enctype="application/xwwwformurlencoded" >
<input type=hidden name=act value=动作 />
<input type=submit value=ok>
</form>
代码MyJspjsp:
<%@ page language="java" import="javautil*" pageEncoding="gb"%>
String tempVal = requestgetParameter("act");
outprintln(new String(tempValgetBytes("ISO") "gb"));
另
本文不讨论针对URL进行加密的操作只是针对URL中文的基本编码处理另外在Javascript中可以运用escape()encodeURI()encodeURICompoent()进行相关的URL编码可以作为Javascript中文编码的参考解决方案