2 HTML编码乱码
因为jsp包括HTML,而HTML也有编码问题
在HTML标签内
html>
3 request获取数据乱码
通过request,response来传递前台和后台的数据时,会产生中文乱码
一般情况都通过对request编码解决:
request.setCharacterEncoding("utf-8");
需要注意的是,这种方式对 URL传参这种JSP请求 是没有作用的。比如:
这种情况仍然会出现乱码,这种URL传参的方式,只能修改服务器tomcat的传输编码格式。
修改tomcat安装文件 apache-tomcat-6.0.43\conf 目录下的server.xml
添加 URIEncoding="UTF-8" ,就可以处理URL传递参数造成的中文乱码问题了。
4 response输出信息乱码
response.setContentType("text/html;charset=utf-8");
5 表单提交中文乱码
对于表单的数据可以使用request.getParameter(“”)的方法获取,但是当表单中出现中文数据的时候就会出现乱码。
示例代码如下
<%@ page language=
"java"
import
=
"java.util.*"
contentType=
"text/html;charset=gb2312"
%>
Form中文处理示例
"2"
>
下面是表单内容:
用户名:
"text"
name=
"userName"
size=
"10"
/>
密 码:
"password"
name=
"password"
size=
"10"
/>
"submit"
value=
"提交"
>
输出数据的示例代码
<%@ page language=
"java"
import
=
"java.util.*"
contentType=
"text/html;charset=gb2312"
%>
Form中文乱码
"2"
> 下面是表单提交以后用request取到的表单数据:
<%
String userName = request.getParameter(
"userName"
);
String password = request.getParameter(
"password"
);
out.println(
"表单输入userName的值:"
+ userName +
"
"
);
out.println(
"表单输入password的值:"
+ password +
"
"
);
%>
产生种结果的原因是Tomcat中对于post方法提交的表单采用的默认编码为ISO-8859-1,而这种编码格式不支持中文字符。对于这个问题可以采用转换编码格式的方法来解决,现在输出数据的页面改动如下:
out.println(
"表单输入userName的值:"
+
new
String(userName.getBytes(
"ISO-8859-1"
),
"gb2312"
)+
"
"
);
out.println(
"表单输入password的值:"
+
new
String(password.getBytes(
"ISO-8859-1"
),
"gb2312"
)+
"
"
);
6 Cookie导致的编码问题
Cookie由于需要保存在客户端中,因此使用过程中都需要编码以及转码,以实验代码为例:
<%@ page language="java" import="java.util.Date" pageEncoding="UTF-8"%>
<%!
String lastAccessDate=null;
String nowAccessDate=null;
Cookie oneCookie=null;
Cookie[] cookies=null;
java.util.Date nowDate=null;
%>
<%
cookies=request.getCookies();
nowDate=new java.util.Date();
if(cookies==null){
lastAccessDate=(nowDate.getYear()+1900)+"年"+(nowDate.getMonth()+1)+
"月"+nowDate.getDate()+"日"+nowDate.getHours()+
"时"+nowDate.getMinutes()+"分"+nowDate.getSeconds()+"秒";
lastAccessDate = java.net.URLEncoder.encode(lastAccessDate,"UTF-8");
//中文编码
oneCookie=new Cookie("lastAccessDate",lastAccessDate);
//包装到cookie信息中
oneCookie.setMaxAge(30*24*60*60); //setMaxAge()?
response.addCookie(oneCookie);//写到客户机器的磁盘中
}
else{
for(int index=0;index
if(cookies[index].getName().equals("lastAccessDate")){
lastAccessDate=cookies[index].getValue();
nowDate=new java.util.Date();
lastAccessDate = java.net.URLDecoder.decode(lastAccessDate,"UTF-8");
//中文解码
nowAccessDate=(nowDate.getYear()+1900)+"年"+(nowDate.getMonth()+1)+
"月"+nowDate.getDate()+"日"+nowDate.getHours()+
"时"+nowDate.getMinutes()+"分"+nowDate.getSeconds()+"秒";//重构访问时间为现在的时间
nowAccessDate = java.net.URLEncoder.encode(nowAccessDate,"UTF-8");
oneCookie=new Cookie("lastAccessDate",nowAccessDate);
oneCookie.setMaxAge(30*24*60*60);
response.addCookie(oneCookie);
break;
}
}
}
out.println("您上次访问本系统是在:"+lastAccessDate);
%>
注意:首先引入java.net.*,该包中包含URLEncoder类;
Ps:网上资料整理