服务器之家:专注于VPS、云服务器配置技术及软件下载分享
分类导航

PHP教程|ASP.NET教程|Java教程|ASP教程|编程技术|正则表达式|C/C++|IOS|C#|Swift|Android|VB|R语言|JavaScript|易语言|vb.net|

服务器之家 - 编程语言 - Java教程 - Java中文乱码浅析及解决方案

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

2023-10-18 14:56浩绪 Java教程

Java的中文乱码是多方面的,它与以下三个设置息息相关:1.Java编译器自动选择的编码格式 2.所使用的命令行工具的编码格式(如Terminal,cmd等)3.源代码文件的编码格式

直入主题

我也不过多地解析什么案例什么的(想必各位遇到的比我都多),直接开始进入主题:

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

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

获得的65001,代表当前cmd使用的编码为UTF-8

获得的936,则说明使用GBK编码

这个编码应该和Java编译器保持一致,我们可以使用chcp 936更改为GBK编码。

控制台的编码与编译后输出相关,改它很有必要。

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

这也是其他教程经常提到的一点,文件的保存格式也会对编译产生影响。

在微软自带的记事本里不能把文本保存为GBK,则应该使用ANSI。

编译器+命令行+源文件编码统一

如果在windows系统上使用gbk编码,请将在文件另存为时选择编码格式为ANSI,这样就可以实现JDK编译器,cmd命令行,文本格式的统一。

但是,如果想在windows里使用UTF-8编码编译,就需要借助IDE或者Gradle这样的项目管理工具。

如果使用IDEA,VSCode等IDE,可以直接把文本编码改成使用UTF-8,然后使用IDE自带的编译启动(就是不用命令行,使用如IDEA的main函数旁边的启动这样),就可以用上UTF-8了。

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(而且控制台会中文乱码)。

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

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

写在最后

通过这些解决中文乱码之后,继续开始黑PHP吧

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

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

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

到此这篇关于Java中文乱码浅析及解决方案的文章就介绍到这了,更多相关内容请搜索服务器之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持服务器之家!

原文地址:https://blog.csdn.net/m0_74075298/article/details/128607966

延伸 · 阅读

精彩推荐
  • Java教程Java集合Stream流操作的基本使用教程分享

    Java集合Stream流操作的基本使用教程分享

    流操作并不会影响原来的集合,可以简单认为,流操作是把集合中的一个元素逐个复制放到一个首尾相接的流动的水槽中。这篇文章整理了Stream流操作的基...

    码指星斗7192023-03-01
  • Java教程平衡二叉树的左右旋以及双旋转的图文详解

    平衡二叉树的左右旋以及双旋转的图文详解

    今天小编就为大家分享一篇关于平衡二叉树的左右旋以及双旋转的图文详解,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友...

    4319379712282021-07-01
  • Java教程Java使用jni清屏功能的实现(只针对cmd)

    Java使用jni清屏功能的实现(只针对cmd)

    JNI是Java Native Interface的缩写,它提供了若干的API实现了Java和其他语言的通信(主要是C&C++)。这篇文章主要介绍了Java使用jni清屏功能的实现(只针对cmd)...

    雅钧8312021-05-05
  • Java教程Java的动态绑定与双分派_动力节点Java学院整理

    Java的动态绑定与双分派_动力节点Java学院整理

    这篇文章主要介绍了Java的动态绑定与双分派,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧...

    zhengzhb3462020-12-12
  • Java教程Java实现AWT四大事件的详细过程

    Java实现AWT四大事件的详细过程

    AWT的事件处理是一种委派式事件处理方式:普通组件(事件源)将整个事件处理委托给特定的对象(事件监听器);当该事件源发生指定的事件时,就通知所委托...

    LNORA3782022-11-29
  • Java教程高并发系统的限流详解及实现

    高并发系统的限流详解及实现

    这篇文章主要介绍了高并发系统的限流详解及实现,内容详细,小编觉得很不错,这里分享给大家,供需要的朋友参考。随小编一起看看吧。...

    nick hao10402021-02-03
  • Java教程MVC框架自定义实现过程

    MVC框架自定义实现过程

    这篇文章主要介绍了MVC框架自定义实现过程,通过搞懂什么是MVC以及MVC的运行原理然后再去理解其演绎过程,本文附含了详细的思维导图帮助大家更好的理...

    十二o3752021-12-11
  • Java教程java去除重复对象的简单实例

    java去除重复对象的简单实例

    下面小编就为大家带来一篇java去除重复对象的简单实例。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧 ...

    java教程网3292020-07-25