1. 问题情形
操作系统:Windows10中文版
IDE:Eclipse 2022-12
开发语言:Java & JDK19
项目编码:UTF-8
写了一个很简单地main方法,打印出中文,结果出现了乱码的情形,如下图:
2. 分析和解决过程
2.1 修改项目编码为GBK
上网搜索了很多解决方式,大部分都是说要更改项目的字符编码集。如下图:
按照网上的说法将项目的编码字符集由UTF-8更改为了GBK,一番倒腾(具体倒腾过程就不赘述了),也确实能够将乱码问题解决。但总觉得就这样将问题解决是给人一种知其然但不知其所以然的感觉。
难道遇到乱码问题就只能将项目的字符编码集更改为GBK吗?如果项目实在是需要采用UTF-8字符集进行编码该怎么办呢?毕竟现在大家通用的都是采用UTF-8字符集进行编码。所以必须要再进一步研究该问题中的乱码情形的深层次原因。
2.2 还原乱码情形
其实乱码的本质是很好理解,字符串在网络和计算机中都是以字节码的形式进行传递和存储的,如果出现乱码,就说明字符串在进行编码时所使用的字符集和解码时所使用的字符集是不一致的。
针对本文中出现乱码的原文“你好,世界杯!”,我在站长工具中做了一番倒腾和测试,还原出了本文中出现乱码的情形。
2.2.1 将原文进行GBK编码
2.2.2 将编码后的结果重新进行UTF-8解码
解码后的结果:
由此可以推断出,Eclipse中出现的乱码情形的原因和逻辑是这样的:
2.2.3 分析
由于对Eclipse的工作原理了解有限,所以我无法知道Eclipse是怎样将源代码中的中文原文输出到控制台的,但由以上的情形演示可以肯定:Eclipse在将中文原文输出到控制台的过程中,肯定存在将原文进行GBK编码的过程。
但为什么要采用GBK编码呢?我的项目不都是采用UTF-8编码的吗?
于是我只能凭着直觉大胆猜测:每个操作系统应该也是有自己的字符编码集的,我的操作系统的字符编码集会不会是GBK,而Eclipse就是根据操作系统的字符编码集对原文进行编码操作的?
经过在网上搜索,搜到了更改Windows10的字符编码集的操作过程,我的操作系统的字符编码集并非UTF-8,应该就是GBK。
2.2.4 解决方式一
2.2.4.1 按Win键,然后点击“设置”
2.2.4.2 输入“语言设置”,选择“语言设置”
2.2.4.3 将鼠标拉倒界面底部,选择“管理语言设置”
2.2.4.4 点击选择“管理 => 更改系统区域设置”
2.2.4.5 勾选“Beta 版…”,然后点击“确定”
如果“Beta 版…”勾选项未被勾选,则表示操作系统的字符编码集并非UTF-8。
2.2.4.6 重启计算机
2.2.4.7 最后在保证项目编码为UTF-8的情形下重新打印输出,问题解决
这个时候如果再将项目编码改为GBK,然后重新编辑源代码进行打印输出,反而会出现另一种乱码情形!各位码友可以自行验证。
2.2.5 解决方式二
2.2.5.1 设置执行时的编码方式
也可以不用配置操作系统的字符编码集,直接在Eclipse里面进行相应的设置就可以解决乱码问题,过程如下:文章来源:https://www.toymoban.com/news/detail-783363.html
- 右击要被执行的Class,选择Run Configurations…,如下图:
- 进入配置界面以后,选择Class被执行时的编码,如下:
- 重新执行Class的main方法,乱码问题解决:
- 小结
首先,该方法必须在每次执行新的Class的main方法时,都必须进行相应的字符编码配置,配置完以后,下次执行时就不需要重新配置。其次,如果main方法中引用了其它的Class类,而被引用的Class类又涉及到了中文输出,则相应的中文输出也会出现乱码,且通过这种配置方式无法解决。这种配置的深层次原因和逻辑为何本人也不了解,请对这种配置方式有深入了解的码友在评论区留言。
3. 总结
在Windows10系统中,Eclipse里面的项目的字符编码集必须与操作系统的字符编码集保持一致,这样在控制台的输出才不会出现乱码。
Windows10系统中的情形就是这样,各位码友若能给出其它更深层次的原因的解释,或者对其它操作系统的相似情形有所了解,则请在评论区留言!文章来源地址https://www.toymoban.com/news/detail-783363.html
到了这里,关于Windows10环境下的Eclipse控制台输出中文乱码的问题的解决的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!