一、尽量配置环境字符集均为UTF-8
Eclipse、IEDA、Mysql、JSP均指定UTF-8
需要在项目开发和编译时指定字符集UTF-8。Eclipse就直接设置整个项目的属性即可。
Windows -> Preferences -> Gengral -> Workspace
Windows -> Preferences -> Gengral -> Content Types -> Text
Windows -> Preferences -> Web -> (CSS Files、Html Files、JavaServer Face、Jsp Files)
Windows -> Preferences -> JSON -> JSON File
二、在JSP的头部进行声明
<%@ pagelanguage="java"contentType="text/html;charset=UTF-8"pageEncoding="UTF-8"%>
三、使用过滤器,所有请求都要经过servlet控制分配器,在servlet的filter设置统一
Filter设置字符集对get提交方式并不起作用,所以还有一种方式,是配置服务器。一Tomcat为例:Tomcat的配置文件中:.me_tcat/conf/server.xml,如下图:
打开进行如下修改:
四、设定数据库连接方式为UTF-8
以Mysql连接为例,在连接Mysql配置url时:
<?xmlversion="1.0" encoding="UTF-8"?>
<config>
<db-info>
<driver-name>com.mysql.jdbc.Driver</driver-name>
<url>jdbc:mysql://localhost:3306/drp?characterEncoding=UTF-8</url>
<user-name>root</user-name>
<password>123456</password>
</db-info>
</config>
以Oracle连接为例:
sqlplus
请输入用户名: sys as sysdba 输入口令:
shutdown immediate;
startup mount;
alter system enable restricted session;
alter system set job_queue_processes=0;
alter system set aq_tm_processes=0;
alter database open;
alter database character set internal_use utf8;
shutdown immediate;
startup;
五、数据库设置为UTF-8
六、JSP与页面参数之间的乱码转换
Request.setCharacterEncoding("UTF-8");//从请求中获取参数出现乱码
response.setContentType("text/html;charset=GBK");//将变量输出到页面时出现乱码
这种情况综合起来还是直接使用过滤器比较合适。
七、对中文采用Java.net.URLEncoder.encode()进行编码
URLEncoder.encode("某中文", "GB18030")
八、代码手动修改
如果在其他地方还出现乱码,可能需要手动修改代码
String test=newString(name.getBytes("gbk"),"utf-8");
九、IE浏览器中文乱码
IE和火狐对URL的处理不同,浏览器在传输URI时得对URL进行编码,IE默认是以UTF_8来传输的,Firefox是GBK来编码,如果不对中文参数进行处理,中文字符经过各个浏览器以各自的方式传输到服务器后就出现了各种编码方式,而服务器却只能以一种编码方式来对接收到得URL进行解码,这样的话和服务器使用的编码方式一致的浏览器在传中文参数时没问题,不一致的就会有问题。
在参数传递之前就进行编码,后台获取参数时再解码即可,并且这种方式可以很好的处理浏览器兼容性问题。
js代码:
var url =encodeURI("transport/viewTransitList.do?searchOption="
+ searchOption + "&searchCondition="
+ searchCondition);
Controller代码:
String searchCondition=request.getParameter("searchCondition");
try {
searchCondition = java.net.URLDecoder.decode(searchCondition, "UTF-8");// 解码
searchCondition = new String(searchCondition.getBytes("iso-8859-1"), "utf-8");
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}