硬核推荐(java乱码怎么处理)java编程出现乱码,Java乱码问题该怎么解决?手把手带你解决!,java 乱码处理,
经常有小伙伴问威哥,JavaWeb 乱码问题该怎么解决,这不昨天又有一个小伙伴问及此事。其实这个问题很简单,很多人搞不定的原因是在于他没有找到导致乱码的根本原因!你找不到导致乱码的根本原因,就去网上一通百度,别人说的头头是道,结果还是没能解决自己的问题。于是你就得出结论,网上的文章都是垃圾........其实,这是因为自己没找到问题的根源,你没有对症下药啊大兄弟!
对于一些有经验的开发者来说,想遇到乱码还真不容易,但对于一些新手来说,乱码几乎是家常便饭!所以今天威哥就带领你把这个新手常遇到的经典问题彻底搞定,让乱码以后躲着你走!
一. 整体解决思路
首先我们要找到产生乱码的根本原因,分析到底是哪种情况导致了乱码,威哥给大家总结了一些常见的可能导致乱码的原因,大家一起来看下:
暂时无法在文档外展示此内容
1.请求乱码
如果是在请求过程中发生的乱码,那么有如下可能:
参数放在 URL 地址中乱码;参数放在请求体中乱码;数据库本身乱码;数据从 Java 应用程序传入数据库的过程中乱码。2.响应乱码
如果是响应乱码,那么原因就会比较多了,一般来说,有如下几种可能的原因:
数据库本身乱码;数据在Java 代码中乱码;数据在浏览器显示的时候乱码;数据在从 Java 应用传到数据库的过程中乱码。不同原因导致的乱码,就会有不同的解决方案,对症下药,才能药到病除!所以你从网上找到的答案,未必就符合你的乱码原因!
分析完可能会导致乱码的原因之后,接下来大家要做的,就是通过 DEBUG 或者打印日志,锁定导致乱码的原因,看看自己的乱码是属于哪一种,找到了乱码的原因,问题就解决了 80%!
然后接下来,我会针对上面每种不同的原因,给出不同的解决方案。
二. 具体解决方案
1.解决URL地址乱码
如果我们把请求参数放在了URL地址栏中,结果出现了乱码,这个问题在GET、DELETE 等请求中是比较常见的。而解决方案也很简单,我们只需要修改 Tomcat 的 conf/server.xml 配置文件,修改 URL编码格式,如下:
这样就可以一劳永逸地解决 URL 地址乱码问题了!可能有人会问,这不是解决 GET 请求乱码的吗?其实这个说法不准确,凡是 URL 地址乱码,都是这样解决的,无论是 GET、POST、PUT,还是 DELETE 请求。
那如果我们的项目是 Spring Boot 项目呢?Spring Boot 中的 Tomcat 都是内嵌的了,那怎么办呢?在 Spring Boot中,其实配置更加简单,我们只需要在 application.properties 配置文件中添加如下配置即可:
2.解决请求体乱码
对于 POST、PUT 等请求,请求参数一般是放在请求体中的,此时如果发生乱码,我们可以在解析参数之前通过设置 HttpServletRequest 编码来解决,如下:
不过如果这样每次都这样设置,就太麻烦了,所以我们可以自定义一个过滤器来解决,如下:
最后配置一下该过滤器:
在传统的 JavaWeb 项目中我们就是这样做的。但如果是SSM 项目的话,SpringMVC 中其实本身就提供了现成的编码过滤器,我们直接配置即可,如下:
当然,现在流行 SpringBoot,根本都不用配置 XML 了,但是我们同样可以使用 Java 代码的形式在 Spring Boot 中配置如上过滤器!
3.解决数据库乱码
对于数据库乱码问题,你只需要打开 SQLYog 或者 Navicat 就知道是不是数据库乱码了。数据库乱码是很容易解决的,一般我们只需要在创建库和表的时候,分别指定编码格式即可,如下:
3.1 设置数据库编码
如果使用 SQLYog,创建数据库的时候记得设置编码格式:
如果使用 Navicat,也是类似:
3.2 设置数据表编码
如果是使用 SQLYog 或者 Navicat创建的表,我们在创建时候也记得勾选一下编码格式即可。
4.解决传输乱码
数据在从Java应用传递到MySQL,或者从MySQL传递到Java代码的过程中,也有可能会发生乱码!这种问题在Windows上一般不易发生,但如果你的数据库是安装在Linux上,这就是一个大概率的问题了。具体表现形式有两种:
数据在 Java 代码中打印是 OK 的,结果一存到数据库中就乱码了;数据在数据库中是 OK 的,结果读取到 Java 代码中一打印就乱码了。这种问题发生在传输过程中,具体解决办法如下,修改 JDBC 连接即可,加上编码格式:
威哥以上提出的四种方案,就可以分别解决上面四种不同的乱码情况,现在你会了吗?
5.解决其他乱码
除了以上几种会导致乱码的情况之外,项目中可能还有其他导致乱码的原因,接下来威哥会给大家继续分析。
5.1 解决JSON 乱码
如果你在项目中用到了号称最快的 Alibaba fastjson,那么你就需要在配置 HttpMessageConverter 时指定编码格式,否则就有可能出现乱码,配置如下:
5.2 解决Properties文件乱码
有时候我们在项目中使用 properties 格式的配置文件,也有可能会导致乱码。不过现在 IntelliJ IDEA 中,已经有现成的解决方案了,我们只需要稍微配置一下即可。点击 File->Settings->Editor->File Encodings,然后进行配置,如下:
三. 养成优秀的编码习惯
1.统一编码格式
另外其实还有一些乱码问题,完全是因为个人的编码习惯不好而导致的,所以各位小伙伴也要养成一个良好的编码习惯哦。
对于开发来说,我们的项目编码、文件编码的格式都必须要统一起来。威哥曾经有个同事就是因为 Freemarker乱码,找了半天没找到原因,后来在威哥的建议下修改了项目编码,乱码问题才得以解决。
2.Eclipse中设置编码格式
其实大家在公司中 Coding时,只要公司制度稍微成熟一些,都会对项目编码、文件编码等有着硬性的规定。比如在Eclipse 中,我们设置项目编码的方式如下(工程的编码要提前设置,如果项目已经开发一半再去设置,已有的中文就会乱码):Window->Preferences->General
然后对JSP 文件,我们也需要提前设置好编码方式,如下:
这是在 Eclipse 中设置文件编码的方式。
3.IDEA中设置编码格式
但我们现在,其实都很少使用 Eclipse 了,更多的是使用 IDEA。所以如果你是在 IntelliJ IDEA中,则不需要设置JSP文件编码,因为默认就是 UTF-8,非常方便省事。在 IntelliJ IDEA 中,我们只需要提前设置下工程编码即可:
四. 结语
好啦,就这些啦,如果以上这些方案还不能解决你的乱码问题,欢迎在评论区留言,威哥会亲自给你解决!觉得有用的话,就关注+点赞吧,后期不迷路!!
本文系作者 @河马 原创发布在河马博客站点。未经许可,禁止转载。
暂无评论数据