在jsp页面指定编码格式,保证跟mysql的字符集一致:
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
第一步:确保项目编码为UTF-8
第二步:确保mysql数据库编码为utf-8,以mysql为例,可到mysql目录下,my.ini文件中修改后,重启mysql服务
第三步:若使用了spring,在web.xml中加入过滤器 (如果你不是在jsp页面里直接处理form,也是和我一样采用servlet来处理form的话,那么在还要增加一个过滤器,这主要是因为采用的是tomcat的web发布器)
<filter>
<filter-name>characterEncodingFilter</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>
<init-param>
<param-name>forceEncoding</param-name>
<param-value>true</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>characterEncodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
第四步:在controller/action中设置
request.setCharacterEncoding("utf-8");
response.setCharacterEncoding("utf-8");
注意:
若出现添加到数据库中没乱码,从数据库显示出现乱码的情况:添加数据页面跟显示数据页面的编码格式要保持一致。
解决数据库表乱码问题
将所有代码文档设置为utf8格式。同时在链接数据库文件(.java)中,作如下修改:
String url="jdbc:mysql://localhost:3306/my?characterEncoding=UTF-8";
在转换字符编码文件中
//将传递进来的字符串转换成byte数组,并确定其编码
byte[] b=value.getBytes("ISO-8859-1");
//用byte数组构造一个新的字符串,并指定其编码
cn=new String(b,"UTF-8");
tomcat 编译接收乱码
出现乱码大体可能三个地方有问题:
1.jsp 页面乱码 ,没有统一编码方式
<%@ page contentType="text/html; charset=UTF-8"%>
2.jsp 与 Servlet(或者action) 间跳转出现中文乱码,接收或响应没有统一编码方式
request.setCharacterEncoding("UTF-8");
response.setCharacterEncoding("UTF-8");
response.setContentType("text/html;charset=UTF-8");
3.项目整体的编码方式未统一 或者 tomcat 的server.xml 中8080端口编码方式未定义
<Connector port="8080" redirectPort="8443"
connectionTimeout="20000" disableUploadTimeout="true" URIEncoding="UTF-8"/>