Java中文乱码浅析及解决方案_浩绪的博客-程序员秘密

技术标签: 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++吧
在这里插入图片描述

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

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/m0_74075298/article/details/128607966

智能推荐

android自定义圆角矩形Imageview_abdroid自定义圆角矩形_Sunny_yezi的博客-程序员秘密

安卓中的默认的imageview显示是矩形的,但往往我们需要做圆角矩形的图片显示,这样棱角不会太突出,之前我也没做过,目前也不是很理解其中缘由,就先做个笔记吧。这做的也是非常简单,连自定义的属性都没有设置首先自定义一个类继承Imageview 代码如下:import android.widget.ImageView;import android.content.Contex

美国MIT EECS(电气工程与计算机科学)系的课程安排_风中的刀声的博客-程序员秘密

<div class="blog-content-box"> <div class="article-header-box"> <div class="article-header"> <div class="ar

均衡发展计算机教室解说词,均衡发展验收计算机教室解说词_weixin_39917291的博客-程序员秘密

各位专家、老师大家好:欢迎来我校检查、指导工作。我承担的是七年级信息技术教学,现在我简单地介绍一下我校计算机教室的使用情况。计算机教室解说词各位专家、老师大家好:欢迎来我校检查、指导工作。我是教七年级信息技术课的教师,现在我简单地介绍一下我校计算机教室的使用情况。我校有教学用计算机306台,生机比达到9:1;办公用计算机123台,师机比达到1.5:1。计算机教室主要承担七、八、九年级信息技术教学,...

基于scrapy的分布式爬虫(3):正则表达式_scrapy expression怎么用_fIsh1220Fish的博客-程序员秘密

正则表达式 正则表达式,regular expression,通常被简写为 regex,其作用是对于信息的提取。基本用法常见元字符及语法使用正则表达式编程练习题优质学习资源推荐基本用法python 中的正则表达式使用不需要安装第三方库,只需要调用re库即可,具体写法为:import resubject = "我是一个粉刷匠,粉刷本领强。"re...

【Android开发小记--12】同步歌词_丁丁d的博客-程序员秘密

效果图:           首先,设置歌词实体类 LrcContent.java,定义歌词的内容和时间:public class LrcContent { private String lrcStr; //歌词内容 private int lrcTime; //歌词当前时间 public String getLrcStr()

【CCPC】2020CCPC威海补题 部分题解 ABCDGHL_2020威海ccpc_一只酷酷光儿( CoolGuang)的博客-程序员秘密

首先说明,思路都是自己与队友联合想的..不过是写了太久 补了三天...AGolden Spirit题目大意:有2*n个老人过河,每个老人都希望去河对面休息x分钟后,然后再回到当前位置,你每次可以扶一个老人过河,过河时间为t问最少需要多长时间可以使得所有老人都满足要求?题目思路:模拟题考虑最终结果,一定是先把所有老人送完注意有2*n个所以送完之后是在刚开始的位置所以判断一下第二个送完的老人休息够了没有,休息够了,那么*2即可,因为任意老人间隔差都为t否则,你有两种选择.

随便推点

SPP-net解读_阿华Go的博客-程序员秘密

介绍:在上面的过程中我们已经看了YOLO实现图片的定位和识别的过程,可以看到它是一个end-to-end的网络,通过设置S*S个格子,然后让每个格子预测B个bbox,然后进行NMS可以得到置信度较大的几个类的预测,然后进行回归分析,注意里面loss值的计算,便可以得到计算速度非常快,效果很不错的YOLO网络,相比faster-rcnn网络,效果没有那么好,但是速度却有了很大的提升!今天我们看一个非...

SQL注入之显错注入_秋水sir的博客-程序员秘密

MySQL基础知识系统自带库information_schema中存在tables表和columns表,我们可以通过这两个表查询相关信息distinct关键字,distinct用于去除查询中的重复,可以用information_schema.tables中的TABLE_SCHEMA字段查询出所有库信息group_concat()函数,此函数只有MySQL中存在,作用是把查询出的内容通...

AlertManager 钉钉报警_YP小站的博客-程序员秘密

AlertManager Dingtalk 简介用于接收AlertManager服务通知并通过钉钉机器人报警prometheus-operator 安装请参考往期文章https://www.jianshu.com/p/0be31195aa8bAlertManager 钉钉报警服务示例项目地址https://github.com/yangpeng14/alertmanager-di...

Android 全局异常捕获_android 设置全局异常_瘋小書的博客-程序员秘密

今天就来说说作为程序猿的我们每天都会遇到的东西bug,出bug不可怕可怕的是没有出bug时的堆栈信息,那么对于bug的信息收集就显得尤为重要了,一般用第三方bugly或者友盟等等都能轻易收集,但是由于公司不让使用第三方,而安卓正好有原生的异常收集类UncaughtExceptionHandler,那么今天博客就从这个类开始.UncaughtExceptionHandler见名知意,即他是处理我

找零钱问题 python_动态规划法(二)找零钱问题_lem0nster的博客-程序员秘密

本文尝试以storyline的方式来写作,如有不足之处,还请多多包涵~~问题的诞生我们故事的主人公叫做丁丁,他是一个十几岁的小男孩,机智聪颖,是某某杂货店的小学徒。在他生活的国度里,只流通面额为1,3,4的硬币。复杂这家店的店长,叫做老王,是个勤奋实干的中年人,每天都要跟钱打交道。  有一天,他心血来潮,叫住正在摆放货物的丁丁,对他说道:“丁丁,你不是学过计算机方面的算法吗?我这里正好有个问题,不...

X86_64汇编与IA32比较_ia32和x86_走出去拍拍照的博客-程序员秘密

什么是X86-64?所谓IA32就是“Intel32位体系结构”(Intel Architecture 32-bit),而我们常说的X86-64就是IA32的64为拓展。数据格式 C声明 Intel数据类型 汇编代码后缀 大小(字节) char 字节 ...

推荐文章

热门文章

相关标签