网站首页 > 教程文章 正文
在从事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读取和写入字符时所采用的默认编码的,不建议修改,但是这里容易遇到坑,所以在软件开发过程中需要留意。
- 上一篇: 大批三星手机“变砖”:出现乱码、黑屏、无限重启!解决办法来了
- 下一篇: 电脑键盘乱码怎么解决?
猜你喜欢
- 2025-01-07 办公难题:打印机乱码怎么办?打印文件时出现乱码是怎么回事?
- 2025-01-07 支付宝回应余额宝界面显示乱码:正在修复,不会影响资金安全和收益
- 2025-01-07 5分钟课堂:输入输出汉字乱码的解决方法
- 2025-01-07 炉石传说回归黑屏蓝屏弹窗乱码怎么办?解决方案戳这
- 2025-01-07 Win11 Build 22533.1001 预览版出现大量文字乱码 Bug
- 2025-01-07 电脑键盘乱码怎么解决?
- 2025-01-07 大批三星手机“变砖”:出现乱码、黑屏、无限重启!解决办法来了
- 2025-01-07 多彩壁纸690期|抖音热门乱码手机壁纸
- 2025-01-07 最近头条文字老是出现乱码。
- 2025-01-07 支付宝居然乱码了!低级错误在支付宝都能出现?让人感觉冷汗直冒
- 最近发表
- 标签列表
-
- location.href (44)
- document.ready (36)
- git checkout -b (34)
- 跃点数 (35)
- 阿里云镜像地址 (33)
- qt qmessagebox (36)
- md5 sha1 (32)
- mybatis plus page (35)
- semaphore 使用详解 (32)
- update from 语句 (32)
- vue @scroll (38)
- 堆栈区别 (33)
- 在线子域名爆破 (32)
- 什么是容器 (33)
- sha1 md5 (33)
- navicat导出数据 (34)
- 阿里云acp考试 (33)
- 阿里云 nacos (34)
- redhat官网下载镜像 (36)
- srs服务器 (33)
- pico开发者 (33)
- https的端口号 (34)
- vscode更改主题 (35)
- 阿里云资源池 (34)
- os.path.join (33)