jsp编码格式问题
1 所有的 .java|.jsp|.html|.xml 源文件均使用utf-8编码格式保存到系统磁盘。
如:在Eclipse中编辑文件,选中文件打开右键菜单选择属性,将文本文件编码设置为其他并选择UTF-8;也可以在
Eclipse——首选项——常规——内容类型中设置各种文件的缺省编码,这样以后所有的文本文件都使用统一编码。
2 在页面显示中文方面 .jsp文件中必须将文件编码格式pageEncoding、<@page>指令中contentType编码格式、<html>的<meta>标签编码格式都设置为utf-8。
如:
<%@ page language="java" pageEncoding="utf-8"%>
<%@ page contentType="text/html;charset=utf-8"%>
<html>
<head>
<title>中文问题</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
</head>
</html>
注意: META标签中的编码字符必须是"utf-8",如果不加中划线,则在ie下出现乱码情况,但ie的原文件查看却是中文!
3 把表单提交内容的字符集设为utf-8,在jsp、servlet或者filter中使用request.setCharacterEncoding("utf-8");
此行代码必须写在最前面,如果在此前进行任何request.getPragrmber()方法都会使字符转换失效!
4 页面超连接连接中带的汉字如中文目录"/系统/页面/首页.jsp",则在tomcat/conf/server.xml中的配置文件中加上:useBodyEncodingForURI="true"即可正常使用getParameter取出正确内容。如:
<!-- Define a non-SSL Coyote HTTP/1.1 Connector on port 8080 -->
<Connector port="8080"
maxThreads="150" minSpareThreads="25" maxSpareThreads="75"
enableLookups="false" redirectPort="8443" acceptCount="100"
debug="0" connectionTimeout="20000" useBodyEncodingForURI="true"
disableUploadTimeout="true" />
注:如果使用get方法提交中文参数如"?name=张三",则必须使用encode编码转换为百分号表示来传递,如:
"?name=%E5%BC%A0%E4%B8%89",注意长度不要超过连接字符串最大长度。
编码方法:[JavaScript] encodeURIComponent("中文");
[Java&JSP] java.net.URLEncoder.encode("中文");
解码方法:[JavaScript] decodeURIComponent("%E4%B8%AD%E6%96%87");
[Java&JSP] java.net.URLDecoder.decode("%E4%B8%AD%E6%96%87");
5 连接MySQL数据库时修改mysql在windows/my.ini里default-character-set=utf-8,并将mysql里数据库和表也都设为utf8_unicode_ci。
6 数据库连结url:jdbc:mysql://localhost:3306/mydb?useUnicode=true&characterEncoding=utf-8
注意,关键就在于此:此句中间是'&'不是'&'这是因为数据库连结时,在.jsp和.java文件中应该用&号,而XML文件中才需要用&
7 使用AJAX方式提交请求时必须为XMLHttpRequest添加头声明
注意:如果已经存在已此名称命名的http头,则覆盖之。此方法必须在open方法后调用。
xmlhttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded;ch
arset=UTF-8");
Tomcat乱码问题:Get方法的处理
tomcat对post和get的处理方法不一样,所以过滤器不能解决get的乱码问题,它需要在其他地方设置。
打开<tomcat_home>/conf目录下server.xml文件,找到对8080端口进行服务的Connector组件的设置部分,给这个组件添加一个属性:URIEncoding="UTF-8"。修改后的Connector设置为:
<Connector port="8080" maxHttpHeaderSize="8192"
maxThreads="150" minSpareThreads="25" maxSpareThreads="75"
enableLookups="false" redirectPort="8443" acceptCount="100"
; connectionTimeout="20000" disableUploadTimeout="true" URIEncoding="UTF-8" />
* 注意修改后重新启动tomcat才能起作用