天天看点

jsp/tomcat/数据库 中文后乱码问题汇总

场景一:

SpringMvc框架下, jsp页面中输入中文传到后台controller变成了乱码, 前台打印:显示正常, 在controller中打断点后看到是乱码

解决方案:

在web.xml中添加编码过滤器 , 如下:

<!-- 编码过滤器 -->
	<filter>
		<filter-name>encodingFilter</filter-name>
		<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
		<!-- <async-supported>true</async-supported> -->
		<init-param>
			<param-name>encoding</param-name>
			<param-value>UTF-8</param-value>
		</init-param>
	</filter>
	<filter-mapping>
		<filter-name>encodingFilter</filter-name>
		<url-pattern>/*</url-pattern>
	</filter-mapping>
           
特别注意: web.xml中的拦截是有先后顺序的一定要把编码过滤器这段代码放前面,否则极有可能不生效

场景二:

项目部署到tomcat运行后,打印的日志中出现一堆乱码

jsp/tomcat/数据库 中文后乱码问题汇总

解决方案:

在 tomcat / conf 目录下 logging.properties文件中:

java.util.logging.ConsoleHandler.encoding = UTF-8
           

将 UTF-8 修改为 GBK,修改后的效果为:

java.util.logging.ConsoleHandler.encoding = GBK
           

保存后,重启tomcat!

场景三:

数据库存储的中文是正常的,但是查询后,传至前台后数据变成了乱码

解决方案:

1.首先排查你的数据源配置中是否指定了编码格式

useUnicode=true characterEncoding=utf-8

注意下面配置中: &amp是&的转义字符,在xml文件中这样配置是没问题的,但是在**.properties就必须去掉才行

jdbc:mysql://127.0.0.1:3306/file_management?autoReconnect=true&amp;useUnicode=true&amp;characterEncoding=utf-8&amp;zeroDateTimeBehavior=convertToNull&amp;useSSL=false
           

2.在tomcat / conf 目录下 server.xml文件 修改如下:

<Connector port="8080" protocol="HTTP/1.1"
               connectionTimeout="20000"
               redirectPort="8443" URIEncoding="UTF-8" useBodyEncodingForURI="true"/>
           
有同学说这个也要配置一下:
 <Connector port="7010" protocol="AJP/1.3" redirectPort="8443" URIEncoding="UTF-8" useBodyEncodingForURI="true"/>
           

重启tomcat ,即可解决

场景4:

页面乱码,往往是在相应的jsp页面或者html页面设置相关的字符集即可解决。如:

<%@page language="java" contentType="text/html; charset=utf-8"
    pageEncoding="utf-8"%>
           
JSP在部署后提供给用户使用,会经过三个阶段:

1 JSP生成java文件:这个阶段会使用pageEncoding所定义的编码格式进行转换

2 java文件生成class文件:这个阶段由服务器tomcat自动使用utf-8编码把java文件转换成字节码class文件

3 通过读取class文件展现给用户:这个阶段由tomcat服务器获取字节码内容,通过使用contentType所定义的编

码格式展现给用户。

大致过程如下图:

 

jsp/tomcat/数据库 中文后乱码问题汇总

另外html有时候也会乱码:

meta中设置编码即可

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
 
</body>
</html>
           

场景5:

存入数据库乱码

1.查看数据库编码格式:

jsp/tomcat/数据库 中文后乱码问题汇总

2.设置数据库的编码格式:

mysql> SET character_set_client='utf8';

mysql> SET character_set_connection='utf8'

mysql> SET character_set_results='utf8'
           

设置好编码,下面便可以成功插入中文了

场景6:

doc窗口标题乱码

场景:在运行jar包时 设置 编码格式为utf-8,如下:

@ECHO OFF
title 智能运维系统-问题记录
chcp 65001
IF "%SETENV%"=="" GOTO SETENV
GOTO END

:SETENV
SET JAVA_HOME=E:\Program Files\Java\jdk1.8.0_181
SET PATH=%JAVA_HOME%\bin;%PATH%;
:END
SET SETENV=SETENV
 
java -Dfile.encoding=utf-8 -jar -Xms512m -Xmx1024m D:\Web-spsolution-fileApp\yw\proj-0.0.1-SNAPSHOT.war  --server.port=8011 --spring.profiles.active=dev
           

然后查看 doc窗口属性后,也是设置的utf-8 如下图,运行时却出现了乱码。

jsp/tomcat/数据库 中文后乱码问题汇总

解决方案:

修改注册表:

1、快捷键win+R,打开运行窗口,输入“regedit”,打开注册表编辑器

2、修改注册表的参数值,

修改注册表路径:HKEY_CURRENT_USER\Console\%"SystemRoot"%_system32_cmd.exe
健名:CodePage
修改前的值为:65001(十六进制),改为:65001(十进制);

注意:因为我之前设置过所以是65001
           

修改后,重启jar包,即可恢复正常

jsp/tomcat/数据库 中文后乱码问题汇总