Java中文乱码浅析及解决方案

直入主题

我也不过多的解析什么案例什么的(想必各位遇到的比我都多),直接开始进入主题:
Java的中文乱码是多方面的,它与以下三个设置息息相关:

1.Java编译器自动选择的编码格式
2.所使用的命令行工具的编码格式(如Terminal,cmd等)
3.源代码文件的编码格式

也就是说,只要这三者有任何一个与其他两个不相同,或者是不同后没有合适的转换(特别是没有IDE的情况下),都会出现中文乱码问题。

需要注意的是,如果使用Gradle开发,那还需要加上一个:

4.Gradle项目配置中指定的编码格式

另外,使用其他的IDE也会有所不同

1.Java编译器自动选择的编码格式

很遗憾,这个问题我们并不能按照自己的意愿解决。Java编译器的编码格式选择完全取自于我们使用的操作系统和地区语言设置,比如当我们使用Windows11中文版时,Java编译器会自动使用GBK编码,目前我还没有想到什么办法解决。

当然,对于Linux用户来说这算不上什么,因为Linux上的Java会自动使用UTF-8编码(无论语言)

2.所使用的命令行工具的编码格式

拿cmd举例:

在cmd中键入chcp

1213
获得的65001,代表当前cmd使用的编码为UTF-8
获得的936,则说明使用GBK编码
这个编码应该和Java编译器保持一致,我们可以使用chcp 936更改为GBK编码。
控制台的编码与编译后输出相关,改它很有必要。

3.源代码文件的编码格式

这也是其他教程经常提到的一点

如果是使用notepad,请将在文件另存为时,选择编码格式为ANSI

如果使用IDEA,VSCode等,请自行更改为保持一致。

4.Gradle项目配置中指定的编码格式

如果使用了Gradle管理项目,我们需要特定的搭配

Java编译器GBK+控制台GBK+文本编码UTF-8+build.gradle配置为UTF-8

打开项目的build.gradle文件,向其中加入下列代码

tasks.withType(JavaCompile){
    options.encoding="UTF-8"		//这里最好选择UTF-8
}

下次编译将会使用指定的编码编译

5.关于一些注意事项

首先,在编译命令javac后添加encoding=utf-8真的不是一个有效的方法,除去繁杂一说,还存在许多不可言说的BUG

其次,所谓的将Windows操作系统更改为beta版的IUTF-8编码(即下图),也不建议,确实,这样一启动CMD就是utf-8编码了,但是Java编译器仍然会使用GBK(而且控制台会中文乱码)。
在这里插入图片描述

另外,如果使用VSCode,其默认使用PowerShell进行编译,我们需要的编码应该是Java编译器GBK+控制台GBK+文本格式UTF-8,因为VSCode的Run会帮我们设置编码,所以需要特别的安排一下。

写在最后

通过这些解决中文乱码之后,继续开始黑C++吧
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
THE END
分享
二维码
< <上一篇

)">
下一篇>>