彻底搞定JAVA乱码问题来龙去脉(java如何处理乱码)

createh52个月前 (02-01)技术教程13

在从事JAVA软件程序开发过程中之所以遇到乱码,问题根本原因是解码和编码不一致造成的,比如将某字符串采用utf8编码存入txt,但是读出时却采用gbk,那么打印字符串时输出肯定是会出现乱码的。这个根本原因可能很多人都清楚,编写程序时可能也会指定编码写入和读出,但是还是少不了会遇到乱码问题,遇到时可能还会花不少时间解决。

本人最近就又因乱码栽了跟头,从10多年前入门java时便遇到过乱码问题,经过多年摸爬滚打,自认为对编码理解算是透彻了,没想到最近交付软件乱码竟然花了我大部分时间。交付客户的软件在我们本机已经测试多次,中文一直显示都非常正常,客户却说乱码,最后远程过去看了确实是乱码。又换2了台电脑时,我们仍然没有重现,最后没办法,还是老老实实检查代码,发现确实有个地方漏了指定编码,有潜在风险,至此花费时间还不算太多,但是奇怪的是给客户新版本,客户仍然坚持说乱码。埋头看代码,已经不可能发生的了,不可能了,不可能了,但是...。一遍一遍又看了多遍代码,真的不可能发生乱码了。最后我只能怀疑客户用错版本了,由于客户已经下班了,所以也没办法远程亲自试下。

感觉自己有点强迫症还是说责任心过头了,由于此次软件交付正好赶在了3天假期前,存在一点点问题,总像个石头压着心头,放松不得。于是又一遍遍捋下中文文字内容从存储文件中,加载到jvm内存,直到显示在界面一步步的过程,其实也只有2个关键位置,一时文件存储编码格式,一时读取时才有的解码格式,这2个地方我均采用确定的“utf8”,所以不可能再产生乱码。最后终于能99.9999%证明是客户的问题了,才算是放下心来。

最后整体总结下乱码相关编码点:

1.FileReader/FileWriter/Scanner,生成时需要指定,不指定使用系统默认编码,这样容易产生乱码,建议指定,本次栽跟头就是因为几处读写都指定了utf8,只有一处new Scanner是未指定导致[笑哭]惨痛教训铭记[敲打]。

2.jvm内存中变量值均采用unicode编码,比如“岳”字unicode编码为5cb3,当程序中定义一个字符串变量值为“岳”时,内存中是通过unicode静态编码表映射为5cb3的。

3.文件中编码,当在程序中定义中文字符串常量时,他们会随和文件采用相同编码进行保存,但是如果采用javac命令行进行编译时,一般都需要指定-encoding utf-8,否则会采用命令行默认编码,这时如果文件编码和命令行编码不一致便会出现编译失败或者中文乱码情况。

4.参数file.encoding,这个参数是用于修改IO读取和写入字符时所采用的默认编码的,不建议修改,但是这里容易遇到坑,所以在软件开发过程中需要留意。

相关文章

小技巧!两分钟解决IntelliJ IDEA中文乱码问题

首先,IntelliJ IDEA真的是一款很方便的Java开发工具,但是关于中文乱码这个问题我不得不吐槽,这个编码也弄得这么麻烦干嘛呀?!下面就说一下怎么解决中文乱码问题:1.首先是编辑器的乱码,这个...

IDEA中控制台输出是中文显示乱码(idea控制台中文输出是问号)

最近学习JAVA,作为一个新手小白,对编程的认知为0。跟随网上的教程学习,安装上IDEA工具后,每次输入语句中有中文时,只要执行就会显示乱码,太搞心态。问题如下图:作为小白,有问题肯定找度娘呀,可这次...

使用httpclient post请求中文乱码解决办法

【ps:本文为凯哥java实际工作中要到错误系列教程,在文章末尾会有本系列其他教程传送门】 概要:在使用httpclient发送post请求的时候,接收端中文乱码问题解决。正文:我们都知道,一般情况下...

乱码是怎么产生的?一“文”打尽乱码问题

在我们处理文件或者处理程序字符时,时不时会遇到乱码的情况,而且这些乱码的情况让人很困惑,大多时候都是CV某度一下,看看有没有相关类似情况的博文出现,如果有那就按照博文上的方式一步一步去解决就好,如果没...

一招教你如何解决中文乱码(中文乱码有什么意义)

#头条创作挑战赛#前言在开发JavaWeb项目时,由于不同的浏览器和服务器对请求和响应处理的编码格式不同,从而导致了中文乱码的现象出现。同时许多的编码方式对中文的处理并不是特别好,所以一般我们需要对请...