中文乱码java问题 java项目乱码几种常见解决方法
发布时间:2023-02-16 13:43:03 所属栏目:Java 来源:互联网
导读:中文乱码java问题经常困扰java开发程序员,今天小编收集整理了一些java项目乱码几种常见解决方法,希望能够帮你解决常见的中文乱码java问题。 一、设置工作空间的编码 1、编辑器的编码会影响到所有的项目中的字符的显示,可以说是作用最为广泛的设置,每一个
中文乱码java问题经常困扰java开发程序员,今天小编收集整理了一些java项目乱码几种常见解决方法,希望能够帮你解决常见的中文乱码java问题。 一、设置工作空间的编码 1、编辑器的编码会影响到所有的项目中的字符的显示,可以说是作用最为广泛的设置,每一个项目都会受到这个设置的影响。点击菜单栏中的窗口(Window)— —选项(Preferences)。 2、点击常规(General)— —工作空间(Wordspace),然后在右侧的文本文件编码格式(Text file encoding)中选择你想要设置的编码格式,系统默认的格式为GBK。 二、设置项目的编码 1、如果其他的项目中不存在乱码问题,只是个别项目显示时出现乱码,那么我们不需要设置工作空间的编码,只需要修改项目的编码即可。 2、选中项目后,右键点击,在弹出的菜单中点击属性(Properties)。 3、在弹出的属性窗口中,选择资源(Resource)— —点击选择Other(其他),然后选择你想要的编码格式。 三、设置单个文件的编码 1、只是个别文件出现了乱码,那么设置个别文件的编码格式就可以解决问题了。选中有乱码的文件,然后点击右键。 2、在弹出的菜单中选择属性(Properties)。 3、在弹出的属性窗口中选择资源,点击Other(其他)后设置个别文件的编码方式。 最近有粉丝给壹哥发来私信,问我Java里的乱码问题该怎么解决,说是自己被乱码问题给弄的焦头烂额的。其实乱码问题解决起来很简单,很多人搞不定乱码是由于没有找到导致乱码的根本原因! 试想,如果你都找不到导致乱码的根本原因,就去网上一通百度查找,即使网上的内容讲地头头是道,但结果还是不能解决自己的问题。于是你就得出结论,网上的文章都是垃圾........其实,这是因为自己没找到问题产生的根源,你没有对症下药啊大兄弟! 对于一些有经验的开发者来说,想遇到乱码还真不容易,但对于一些新手来说,乱码几乎是家常便饭!所以壹哥今天就带大家把这个新手常遇到的经典问题彻底搞定,让乱码问题以后躲着你走! 几种常见的java乱码问题解决思路 首先我们要找到导致乱码的根本原因,分析到底是哪种情况导致了乱码,壹哥给大家总结了几种常见的可能导致乱码的原因,我们一起来看看: 接下来壹哥就把上述几种情况分别讨论分析一下。 1. 请求乱码 如果是在请求过程中发生的乱码,有可能是以下几种情况: 参数放在 URL 地址中乱码; 参数在请求体中乱码; 数据库本身乱码; 数据从 Java 应用程序传入数据库的过程中乱码。 @L_301_1@2. 响应乱码 如果是响应乱码,那么原因就会更多一些,一般来说,有如下几种可能: 数据库本身乱码; 数据在Java 代码中乱码; 数据在浏览器显示时乱码; 数据在从 Java 应用传到数据库的过程中乱码。 不同原因导致的乱码,就会有不同的解决方案,对症下药,才能药到病除!所以你从网上找到的答案,未必就符合你的乱码原因! 分析完以上这些可能会导致乱码的原因之后,接下来大家要做的,就是通过 DEBUG 或者打印日志来锁定导致乱码的原因,看看自己的乱码到底是属于哪一种,找到了乱码的原因,问题就解决了 80%! 接下来壹哥针对上面每种不同的原因,给出不同的解决方案。 1. 解决URL地址乱码 如果我们把请求参数放到了URL地址栏中,结果出现了乱码,这个问题在GET、DELETE 等请求中是比较常见的,而解决方案也很简单,我们只需要修改 Tomcat 的 conf/server.xml 配置文件,修改 URL编码格式,如下: 这样就可以一劳永逸地解决 URL 地址乱码问题了!可能有人会问,这不是解决 GET 请求乱码的吗?其实这个说法不准确,凡是 URL 地址乱码,都是这样解决的,无论是 GET、POST、PUT,还是 DELETE 请求。 我们知道,Spring Boot 中的 Tomcat 是内嵌的,那该怎么办呢?在 Spring Boot 中,其实配置更加简单,我们只需要在 application.properties 配置文件中添加如下配置即可: server.tomcat.uri-encoding=UTF-8spring.http.encoding.force-request=truespring.http.encoding.force-response=true 2. 解决请求体乱码 对于 POST、PUT 等请求,请求参数一般是放在请求体中的,此时如果发生乱码,我们可以在解析参数之前通过设置 HttpServletRequest 编码来解决,如下: request.setCharacterEncoding("UTF-8"); 不过如果每次都这样设置,就太麻烦了,所以我们可以自定义一个过滤器来解决,如下: public class EncodingFilter implements Filter {@Overridepublic void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, servletexception {request.setCharacterEncoding("UTF-8");chain.doFilter(request, response);}} 最后再配置一下该过滤器: <filter><filter-name>encodingFilter</filter-name><filter-class>com.qfedu.filter.EncodingFilter</filter-class></filter><filter-mapping><filter-name>encodingFilter</filter-name><url-pattern>/*</url-pattern></filter-mapping> 在传统的JavaWeb项目中我们是按上述方法解决乱码问题的,但如果在SSM项目中,SpringMVC本身就提供了现成的编码过滤器,我们直接配置即可,如下: <filter><filter-name>encoding</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>forceRequestEncoding</param-name><param-value>true</param-value></init-param><init-param><param-name>forceResponseEncoding</param-name><param-value>true</param-value></init-param></filter><filter-mapping><filter-name>encoding</filter-name><url-pattern>/*</url-pattern></filter-mapping> 当然,现在流行的SpringBoot,根本都不用配置 XML文件了,但我们同样可以使用 Java 代码的形式在 Spring Boot 中配置如上过滤器! 3. 解决数据库乱码 对于数据库中的乱码问题,我们只需要打开 sqlYog 或者 Navicat 就可以确定是不是数据库乱码了。其实数据库乱码是很容易解决的,一般只需要在创建库和表的时候,分别指定编码格式即可,如下: 3.1 设置数据库编码 CREATE DATABASE `vhr` DEFAULT CHaraCTER SET utf8; 如果你使用的是 sqlYog,创建数据库时记得设置编码格式: 如果你使用的是 Navicat,类似如下: 3.2 设置数据表编码 DROP TABLE IF EXISTS `baize`;CREATE TABLE `baize` (`id` int(11) NOT NULL AUTO_INCREMENT,`eid` int(11) DEFAULT NULL,PRIMARY KEY (`id`),) ENGINE=InnoDB DEFAULT CHARSET=utf8; 如果是使用 sqlYog 或者 Navicat创建的表,我们在创建时候也记得勾选一下编码格式即可。 4. 解决传输乱码 数据在从 Java 应用传递到 MysqL,或者从 MysqL 传递到 Java 代码的过程中,也有可能会发生乱码!这种问题在 Windows 上一般不易发生,但如果你的数据库是安装在了 Linux 上,这就是一个大概率的问题了。具体表现形式有两种: 数据在 Java 代码中打印是正常的,结果一存到数据库中就乱码了; 数据在数据库中是正常的,结果读取到 Java 代码中一打印就乱码了。 这种问题发生在传输过程中,具体解决办法如下,修改 JDBC 连接即可,加上编码格式: jdbc:MysqL:///baize?useUnicode=true&characterEncoding=UTF-8 壹哥以上提出的四种方案,就可以分别解决上面四种不同的乱码情况,现在你会了吗? 5. 解决其他乱码 除了以上几种会导致乱码的情况之外,项目中可能还有其他导致乱码的原因,接下来壹哥会给大家继续分析。 5.1 解决JSON 乱码 如果你在项目中用到了号称最快的 Alibaba fastjson,那么你需要在配置 HttpMessageConverter 时指定编码格式,否则就有可能出现乱码,配置如下: @BeanFastJsonHttpMessageConverter fastJsonHttpMessageConverter() {FastJsonHttpMessageConverter converter = new FastJsonHttpMessageConverter();FastJsonConfig config = new FastJsonConfig();config.setCharset(Charset.forName("UTF-8"));converter.setFastJsonConfig(config);converter.setDefaultCharset(Charset.forName("UTF-8"));return converter;} (编辑:甘南站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |