千锋教育-做有情怀、有良心、有品质的职业教育机构

400-811-9990
手机站
千锋教育

千锋学习站 | 随时随地免费学

千锋教育

扫一扫进入千锋手机站

领取全套视频
千锋教育

关注千锋学习站小程序
随时随地免费学习课程

上海
  • 北京
  • 郑州
  • 武汉
  • 成都
  • 西安
  • 沈阳
  • 广州
  • 南京
  • 深圳
  • 大连
  • 青岛
  • 杭州
  • 重庆
当前位置:重庆千锋IT培训  >  技术干货  >  JavaWeb 乱码问题该怎么解决

JavaWeb 乱码问题该怎么解决

来源:千锋教育
发布人:lxl
时间: 2023-03-21 11:27:06

  对于一些有经验的开发者来说,想遇到乱码还真不容易,但对于一些新手来说,乱码几乎是家常便饭!所以今天就带领你把这个新手常遇到的经典问题彻底搞定,让乱码以后躲着你走!

  一. 整体解决思路

  首先我们要找到产生乱码的根本原因,分析到底是哪种情况导致了乱码,百泽老师给大家总结了一些常见的可能导致乱码的原因,大家一起来看下:

JavaWeb 乱码问题该怎么解决

  1.请求乱码

  如果是在请求过程中发生的乱码,那么有如下可能:

  •   参数放在 URL 地址中乱码;
  •   参数放在请求体中乱码;
  •   数据库本身乱码;
  •   数据从 Java 应用程序传入数据库的过程中乱码。

  2.响应乱码

  如果是响应乱码,那么原因就会比较多了,一般来说,有如下几种可能的原因:

  •   数据库本身乱码;
  •   数据在Java 代码中乱码;
  •   数据在浏览器显示的时候乱码;
  •   数据在从 Java 应用传到数据库的过程中乱码。

  不同原因导致的乱码,就会有不同的解决方案,对症下药,才能药到病除!所以你从网上找到的答案,未必就符合你的乱码原因!

  分析完可能会导致乱码的原因之后,接下来大家要做的,就是通过 DEBUG 或者打印日志,锁定导致乱码的原因,看看自己的乱码是属于哪一种,找到了乱码的原因,问题就解决了 80%!

  然后接下来,我会针对上面每种不同的原因,给出不同的解决方案。

  二. 具体解决方案

  1.解决URL地址乱码

  如果我们把请求参数放在了URL地址栏中,结果出现了乱码,这个问题在GET、DELETE 等请求中是比较常见的。而解决方案也很简单,我们只需要修改 Tomcat 的 conf/server.xml 配置文件,修改 URL编码格式,如下:

JavaWeb 乱码问题该怎么解决

  这样就可以一劳永逸的解决 URL 地址乱码问题了!可能有人会问,这不是解决 GET 请求乱码的吗?其实这个说法不准确,凡是 URL 地址乱码,都是这样解决的,无论是 GET、POST、PUT,还是 DELETE 请求。

  那如果我们的项目是 Spring Boot 项目呢?Spring Boot 中的 Tomcat 都是内嵌的了,那怎么办呢?在 Spring Boot 中,其实配置更加简单,我们只需要在 application.properties 配置文件中添加如下配置即可:

  server.tomcat.uri-encoding=UTF-8

  spring.http.encoding.force-request=true

  spring.http.encoding.force-response=true

  2.解决请求体乱码

  对于 POST、PUT 等请求,请求参数一般是放在请求体中的,此时如果发生乱码,我们可以在解析参数之前通过设置 HttpServletRequest 编码来解决,如下:

  request.setCharacterEncoding("UTF-8");

  不过如果这样每次都这样设置,就太麻烦了,所以我们可以自定义一个过滤器来解决,如下:

JavaWeb 乱码问题该怎么解决

  最后配置一下该过滤器:

JavaWeb 乱码问题该怎么解决

  在传统的 JavaWeb 项目中我们就是这样做的。但如果是SSM 项目的话,SpringMVC 中其实本身就提供了现成的编码过滤器,我们直接配置即可,如下:

JavaWeb 乱码问题该怎么解决

  当然,现在流行 SpringBoot,根本都不用配置 XML 了,但是我们同样可以使用 Java 代码的形式在 Spring Boot 中配置如上过滤器!

  解决数据库乱码

  对于数据库乱码问题,你只需要打开 SQLYog 或者 Navicat 就知道是不是数据库乱码了。数据库乱码是很容易解决的,一般我们只需要在创建库和表的时候,分别指定编码格式即可,如下:

  3.1 设置数据库编码:

  CREATE DATABASE `vhr` DEFAULT CHARACTER SET utf8;

  如果使用 SQLYog,创建数据库的时候记得设置编码格式:

图片5

  如果使用 Navicat,也是类似:

JavaWeb 乱码问题该怎么解决

  3.2 设置数据表编码:

JavaWeb 乱码问题该怎么解决

  如果是使用 SQLYog 或者 Navicat创建的表,我们在创建时候也记得勾选一下编码格式即可。

  解决传输乱码

  数据在从 Java 应用传递到 MySQL,或者从 MySQL 传递到 Java 代码的过程中,也有可能会发生乱码!这种问题在 Windows 上一般不易发生,但如果你的数据库是安装在了 Linux 上,这就是一个大概率的问题了。具体表现形式有两种:

  数据在 Java 代码中打印是 OK 的,结果一存到数据库中就乱码了;

  数据在数据库中是 OK 的,结果读取到 Java 代码中一打印就乱码了。

  这种问题发生在传输过程中,具体解决办法如下,修改 JDBC 连接即可,加上编码格式:

  jdbc:mysql:///baize?useUnicode=true&characterEncoding=UTF-8

  以上提出的四种方案,就可以分别解决上面四种不同的乱码情况,现在你会了吗?


声明:本站稿件版权均属千锋教育所有,未经许可不得擅自转载。

猜你喜欢LIKE

java的输入语句—— Scanner类

2023-05-04

java数据库操作常识事务的四大特性

2023-05-04

DML数据操作之增加或删除数据

2023-05-04

最新文章NEW

socket是什么?有什么作用?

2023-05-04

Java常量定义是什么

2023-04-28

一分钟带你学多线程

2023-04-28

相关推荐HOT

更多>>

快速通道 更多>>

最新开班信息 更多>>

网友热搜 更多>>