植物百科网
当前位置: 首页 农业百科

java代码乱码修复(Java乱码问题原因及解决方案大全)

时间:2023-08-15 作者: 小编 阅读量: 5 栏目名: 农业百科

java代码乱码修复最近有粉丝给壹哥发来私信,问我Java里的乱码问题该怎么解决,说是自己被乱码问题给弄的焦头烂额的。接下来壹哥针对上面每种不同的原因,给出不同的解决方案。其实这个说法不准确,凡是URL地址乱码,都是这样解决的,无论是GET、POST、PUT,还是DELETE请求。

java代码乱码修复?最近有粉丝给壹哥发来私信,问我Java里的乱码问题该怎么解决,说是自己被乱码问题给弄的焦头烂额的其实乱码问题解决起来很简单,很多人搞不定乱码是由于没有找到导致乱码的根本原因,下面我们就来说一说关于java代码乱码修复?我们一起去了解并探讨一下这个问题吧!

java代码乱码修复

最近有粉丝给壹哥发来私信,问我Java里的乱码问题该怎么解决,说是自己被乱码问题给弄的焦头烂额的。其实乱码问题解决起来很简单,很多人搞不定乱码是由于没有找到导致乱码的根本原因!

试想,如果你都找不到导致乱码的根本原因,就去网上一通百度查找,即使网上的内容讲地头头是道,但结果还是不能解决自己的问题。于是你就得出结论,网上的文章都是垃圾........其实,这是因为自己没找到问题产生的根源,你没有对症下药啊大兄弟!

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

一. 乱码问题解决思路

首先我们要找到导致乱码的根本原因,分析到底是哪种情况导致了乱码,壹哥给大家总结了几种常见的可能导致乱码的原因,我们一起来看看:

接下来壹哥就把上述几种情况分别讨论分析一下。

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 中的 Tomcat 是内嵌的,那该怎么办呢?在 Spring Boot 中,其实配置更加简单,我们只需要在 application.properties 配置文件中添加如下配置即可:

    server.tomcat.uri-encoding=UTF-8spring.http.Encoding.force-Request=truespring.http.encoding.force-response=true

    2.解决请求体乱码

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

    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 上,这就是一个大概率的问题了。具体表现形式有两种:

    1. 数据在 Java 代码中打印是正常的,结果一存到数据库中就乱码了;
    2. 数据在数据库中是正常的,结果读取到 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;}

    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 中,我们只需要提前设置下工程编码即可:

    四. 结语

    至此,壹哥就把导致乱码的几个常见原因都给大家总结梳理了一遍,并讲解了对应的解决方案和良好的开发习惯。如果以上这些方案还不能解决你的乱码问题,欢迎在评论区留言,壹哥会亲自给你解决!

    • 推荐阅读
    • 突触名词解释(突触是什么意思)

      突触名词解释突触是指一个神经元的冲动传到另一个神经元或传到另一细胞间的相互接触的结构。突触是神经元之间在功能上发生联系的部位,也是信息传递的关键部位。在光学显微镜下,可以看到一个神经元的轴突末梢经过多次分支,最后每一小支的末端膨大呈杯状或球状,叫做突触小体。这些突触小体可以与多个神经元的细胞体或树突相接触,形成突触。从电子显微镜下观察,可以看到,这种突触是由突触前膜、突触间隙和突触后膜三部分构成。

    • 《守望先锋》对战局影响大招top一览 守望先锋对局战绩

      今天小编要为大家带来的是玩家“黑呦酱”分享的《守望先锋》对战局影响大招top一览,感兴趣的玩家赶紧一起来看看吧!守望先锋大招分为四类,控制类,自身BUFF类,辅助类以及伤害类,由于伤害类大部分使用大招时,本体无法进行有效杀伤,且控制类及自身BUFF类需要其他技能的配合,so,此间因素也要加入考量。

    • 运动后喝黑咖啡还能燃脂吗 运动时喝黑咖啡会加快燃脂吗?

      2、运动过程中身体脂肪会加速燃烧,从而具有一定减肥作用;而黑咖啡热量比较小,加上其中含有大量的咖啡因以及维生素、纤维素物质,适量喝可以促进人体肠胃蠕动,加速脂肪代谢分解,对减肥具有促进作用。

    • 斯威汽车质量怎么样(斯威质量好不好)

      2018年6月起,斯威“品质特工队”以四大火炉的重庆作为起点,途径海南、吐鲁番、格尔木三地,历时近一年进行了数十万公里极限环境适应性试验。极端干燥高温环境下,常见车内温度往往会狂飙到60℃以上,而在斯威G01的车厢里,却始终能够保持清新凉爽的状态。一整套严酷考验下来,斯威G01的性能表现完全得以充分认证。这样一算,斯威G01差不多完成了近百万公里的专业级严酷考验。

    • 春天兰花怎么养 春天兰花怎么养浇水

      白墨兰花哪个品种最好白墨兰花是墨兰的珍贵变异品种假鳞茎椭圆形,已有数百年栽培历史,流传至今,不下十数个品种,它叶色莹润、体态优雅、幽香静远、且抗病,白墨兰花比较好的品种一般分企剑和软剑两个品系。什么兰花开花最香兰花品种很多,按花香来排,在兰花界春兰居首,惠兰次之,随后便是建兰、墨兰和寒兰,春兰的花香味最正宗,持久性也极强。

    • 奔驰e300l前进挡总共有几个(你看了奔驰22款E300L升级这套原厂HUD抬头显示效果觉得怎么样)

      从行车安全的角度来考虑,加装一台HUD是非常有必要的。HUD的全称是HeadUpDisplay,中文翻译过来就是抬头显示器。今天星骏汇小陈通过以上的产品配件图了解,我们看到这台奔驰22款E300L升级HUD抬头显示所需要更换的配件有,抬显仪器,高配仪表盖板,高配仪表电脑,雨量传感器,空调管升级HUD抬头显示把仪表台上的那一块盖板换掉,换成高配的预留好显示器孔位的盖板,装上显示器,从而使仪表显示的内容投射到挡风玻璃上面。

    • 儿童葫芦丝表演(通城千人共奏葫芦丝)

      儿童葫芦丝表演香城都市报讯 10月27日,通城县隽水中学参加湖北省“黄鹤杯”美育节节目视频录制现场,七、八年级千名学生,同奏乐曲《龙的传人》。该校相关负责人介绍,本学期,每天下午预备铃响5分钟,七、八年级各班集体合奏葫芦丝。丝竹声声,已渐成校园一道靓丽的风景线。近年来,该校贯彻落实社会主义核心价值观,注重未成年人思想道德建设,坚持开设中华传统和特色民族特色教育课程,促进学生“德智体”全面发展。

    • 鸡娃时代孩子的成长之道(与其1岁就开始鸡娃)

      出生时大脑发育已经完成25%,1岁完成了50%,3岁完成了60%,6岁达到90%。现在小学虽然是零基础入学,取消了统一考试,但是它对学生的要求并没有降低。吃够了佛系养娃的亏,橙子家的老二断然不肯再佛系养了。北京卫视于2018年摄制的纪录片《起跑线》中,有一个7岁的北京女孩令人印象深刻。她的家庭,在北京三环内有一套房,一辆车。妈妈认为,孩子从小培养兴趣,靠的是父母的指引。

    • 环氧树脂的作用与用途(环氧树脂有什么作用与用途)

      环氧树脂的作用与用途具有优良的物理和电绝缘性能,强度高、收缩性低,耐腐蚀以及有高绝缘的优势,所以被称为万能胶。电器、电机绝缘封装件的浇注。从常压浇注、真空浇注已发展到自动压力凝胶成型。长时间接触胶水时,有人会有细微的皮肤过敏和细微瘙痒疼痛的情况,建议在运用时戴上防护手套,如果出现了这样的情况,需要用酒精擦洗,然后用清水冲洗干净。

    • 明月曾照江东寒剧情(明月曾照江东寒剧情介绍)

      明月曾照江东寒剧情剧情简介:美少女战清泓是武林副盟主战破敌之女,从小被父亲禁止涉及江湖事。十年一期的武林大会即将来临,战清泓瞒着家人偷跑下山,立志夺取武林盟主之位。战清泓与温宥也开始互生情愫,奈何最终被世俗礼法所阻碍。与此同时,江湖上风起云涌,战清泓发现自己自幼背诵的家训竟是人人趋之若鹜的第一神功《鹤羽剑法》。