Java(包括JSP)源文件中很可能包含有中文,而Java和JSP源文件的保存方式是基于字节流的,如果Java和JSP编译成class文件过程中,使用的编码方式与源文件的编码不一致,就会出现乱码。另外在HTML页面中,也是由于页面的编码与浏览器解释所用的编码不一致,导致出现乱码,如图所示
1、HTML页面
为了使HTML页面很好的支持中文,在每个HTML页面的<head>标签内部增加
<head>
......
<META http-equiv=Content-type content="texy/html;charset=UTF-8">
......
<head>
2、JSP页面
pageEncoding是jsp文件本身的编码contentType的charset是指服务器发送给客户端时的内容编码
<%@ page language="java" contentType="text/html;charset=UTF-8" pageEncoding="UTF-8"%>
3、解决页面数据传输的中文问题:
最佳方法是采用编码过滤器来解决,设置一个过滤器,把所有的数据都进行转码
<!--定义编码过滤器-->
<filter-name>encodingFilter</filter-name>
<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>UTF-8</param-value>
<init-param>
<filter>
<filter-mapping>
<filter-name>encodinFilter</filter-name>
<url-pattern>/*</url-pattern>
<filter-mapping>
4、HTtp(post)请求中的中文乱码
在Servlet页面中 添加
response.setCharacterEncoding("UTF-8");
5、HTTP(get)请求中的中文乱码问题:
如果是get,需要获取请求的字符串,然后把整个字符串进行转换,同时需要知道原编码,下例假设为 ISO-8859-1
String param = new String(request.getParameter("param").hetBytes("ISO-8859-1","UTF-8"));
6、Mysql数据库中的中文问题:
解决Mysql数据库中文问题主要在JDBC驱动的URL上添加:
jdbc:mysql://localhost/test?user=root&password=123456&userUnicode=true&characterEncoding=UTF-8;
7、Mysql数据库在windows系统中,dos中显示表中数据为乱码,但是数据输入与输出均正常:
这是因为windows系统中,默认的编码是中文,而写入的时候是UTF-8,
此时只需要设置 set names gb2312 即可