作者:awdewqd65_988 | 来源:互联网 | 2017-05-12 15:07
MySQL虽说好用,但很容易出现中文乱码的问题,以下列出Java Web开发中常见的几种中文乱码问题:1、JSP页面显示问题2、存入MySQL数
MySQL虽说好用,但很容易出现中文乱码的问题,以下列出Java Web开发中常见的几种中文乱码问题:
1、JSP页面显示问题
2、存入MySQL数据中文乱码
3、读取MySQL数据中文乱码
字符集:字符集定义了它包含哪些字符以及每个字符对应什么数字。
字符编码:在计算机中存储数字,显示时转换为对应的字符,编码方式是指表示字符的数字以什么方式存储。
介个也太唧唧歪歪了,不搞这个研究的可以完全忽视。只要知道UTF-8是为统一世界上所有字符编码的产物就ok了。
解决方法才是王道:
(如果页面使用到CKEditor插件的话,其实中文乱码和这个关系不大)
1、JSP显示中文乱码的问题,一般都是没有设置页面编码,注意添加以下这样一段代码
<%@ page pageEncoding=”UTF-8”%>
<%@ page language="java" cOntentType="text/html; charset=UTF-8"%>
"pageEncoding"指定了当前jsp文件存储使用的编码方式,“contentType”用来指定响应头消息中的"Content-Type"
当服务端的响应头消息中没有指定charset时,客户端会依据上面代码中的charset指定的编码方式解码页面
并且JSP都以UTF-8的编码方式保存,把所有可能出现的问题通通抹杀。 如果你使用Myeclipse,可以设置Myeclipse的默认参数,使Myeclipse新建JSP文件时,可以自动是用UTF-8的编码方式。方法:Windows-Preference-Myeclipse-File and Editor-JSP-Encoding,选择ISO 10646/Unicode(UTF-8)
2、存储数据,MySQL表的编码设定,最好指定相应的编码格式。字符集选择utf8,校对utf8_unicode_ci。
安装MySQL时,会提示使用什么样的默认编码,当然也可以自己设定
修改 my.ini(MySQ安装目录下的文件)
# CLIENT SECTION
[client]
port=3306
[mysql]
default-character-set=utf8
# The default character set that will be used when a new schema or table is
# created and no character set is defined
default-character-set=utf8
修改完毕后,务必记得重启MySQL!!!修改这个文件,是我设置了CharacterEncoding、指定了页面编码、并且使用了过滤器依旧无法解决问题,几近崩溃的时候,最后的救命稻草!
3、读取数据时,,在Servlet中添加request.setCharacterEncoding("UTF-8");可以很好地解决从JSP页面接受中文参数乱码
4、使用过滤器,如果在MySQL默认编码格式为UTF-8的情况下,只使用过滤器,便可以解决一切问题,无论你有没有设置那些繁杂的编码。
在包中建一个class:CharacterEncodingFilter
package com.rady.blog;
import java.io.IOException;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
public class CharacterEncodingFilter implements Filter {
private FilterConfig config;
private String encoding = "UTF-8";
public void destroy() {
cOnfig= null;
}
@Override
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException, ServletException {
request.setCharacterEncoding(encoding);
chain.doFilter(request, response);
}
public void init(FilterConfig config) throws ServletException {
this.cOnfig= config;
String s = config.getInitParameter("encoding");
if (s != null) {
encoding = s;
}
}
}
在web.xml中添加
EncodingFilter
com.rady.blog.CharacterEncodingFilter
encoding
UTF-8
EncodingFilter
/*
最后把Tomcat也干掉,防患于未然,滴水不漏,中文从此不再!
修改Tomcat安装目录/conf/server.xml文件
cOnnectionTimeout="20000"
redirectPort="8443" URIEncoding="UTF-8"/>