IDEA中代码中文和控制台输出中文乱码解决

提示:嫌麻烦的直接跳过第一项即可!但第二和第三项一定要连着看!

1.Project Encodings 和 Global Encoding的作用

首先从官方文档里面了解到,是这样描述Global Encoding的:

意思是:如果遇到不属于项目的文件(即你单独打开一个Java文件而没有New Project)或者从版本系统中检出源码的时候,没有明确指定编码,这两种情况下会选择Global Encoding的编码格式来进行,而不是所谓的英文理解上的应用于全部项目的编码格式

翻译过来是:对于表格中未明确指定编码的文件,您需要选择一个合适的编码方式来确保这些文件可以被正确地读取或写入。

听着很难懂,说人话就是,例如你的同学李华用的是GBK编码,而你用的是UTF-8的编码,那么你打开他的文件的时候,就会发生编码错误提示,因为你使用的是UTF-8,此刻GBK就是没有列出在表格的编码格式(即 not listed in the table below),除此之外,Project Encodings也是你新建一个项目时文件使用的默认编码,接下来我会详细说明。

2.(直接解决方案)Global Encoding、Project Encodings 和 右下加的File Encoding的关系

首先要明确,Global Encoding是和Project Encoding控制着不同的东西(至于是控制着生成的什么文件我也不清楚,但通过试验可以得出),而我们所经常迷惑的右下角的File Encoding,就是这个小东西:

它起始就是你新建一个文件时的选择的Global Encoding的编码格式,如果你新建一个项目时Global Encoding和Project Encoding不同,就会在控制台发生乱码现象,而编辑器的中文是正常的

IDEA分为三种编码等级:

右下角File Encoding是最高优先级,代表着当前文件文本的编码格式

Settings设置中的Project Encodings和Global Encodings处于同一优先级,并且都弱于File Encoding
所以一旦用File Encoding改变编码格式后,就不受Project Encodings和Global Encodings约束了。而之所以新建一个文件时File Encoding和Global Encodings保持一致,是因为为了减少使用者在创建多个项目的时候,多次更改Global Encodings而导致多个项目编码混乱的情况,而Project Encodings在新建项目时使用默认值是为了确保有一个干净的、未被先前项目配置影响的编码环境。

小段总结:

1.Global Encodings和右下角的File Encoding在新建项目时默认一样的,这是IDEA让全局化避免出错的一种体现,而File Encoding类似于控制着当前文件文本的读取编码和控制台输出编码格式

2.Project Encodings和File Encoding之间是不同的,好像控制着不同地方的编码格式输出,而如果不在File Encoding上改动的话,需要保持Project Encodings和其一致,需要改动Project Encodings

3.改动File Encoding之后,即使用右下角的File Encoding convert转换之后,整个项目的文件文本就只受到File Encoding的控制,和Project Encodings无关了

可以看出来此时右下角的File Encoding和Global Encodings是一样的

那么怎么纠正呢?有两种方法:

(1)不改变Global Encodings 或 右下角的File Encoding那么只需要你将Project Encodings改为和右下角的File Encoding(即Global Encodings)相同就可以了

如此乱码正常了。

(2)第二种方法就是将你的右下角的File Encoding(记住是右下角的,不是设置中的Global Encodings),选择和你的Project Encodings相同的编码,之后

选择Convert(不是Reload),选择Reload是没有用的。

1.Reload是对你的编辑器中的代码编码进行重新加载编码格式,对生成的解释文件的编码格式是没有改变的,只转换文件编码格式

2.而Convert是对你的文本、文件的编码格式都进行转换

注意,当你对你的项目进行过Convert之后,你的项目的编码格式和你Settings设置中的Project Encodings和Global Encodings就没有约束关系了,它就是它,现在只跟右下角的File Encoding有关系

3.Convert 和 Reload 的区别

下面就要说到Reload和Convert的详细操作了,相信不少同学都是在这一乱按导致编码格式无法调整回去了,首先承接上面的我们知道,现在更改过Convert一次编码格式后,就只需要对右下角的FIle Encoding进行操作就行了,现在我使用的是GBK编码,那么我Reload一次看看

由 GBK Reload 为UTF-8的结果:

变为UTF-8的编码后,发现编辑器的文件发生乱码了,并且上面还给出了错误提示:文件在一个错误的编码格式 UTF-8 中加载,说明我们仅是改变了文件的代码编码格式,运行一下,会发现乱码

说明我们的文本格式还是GBK,而文件编码却是UTF-8,但如果我想要变为UTF-8编码而不想使用GBK编码怎么办呢?那就要使用Convert了

我们先重复上述操作,将文件编码调整回GBK,再选择convert

会发现编辑代码没有乱码,并且控制台输出也没有乱码,完美!

3.特别注意

在上一项操作中,我 Convert 到 UTF-8 之前要先保证此时的编码是正确的没有错误提示你要 Reload 到原来的编码格式之后,再Convert才行)即编辑器中的文件没有乱码,如下图:

只要没有上一行这样的提示或者乱码,我们就可以随心所欲的convert,但如果有这样的提示,你再convert的话,会发出警告

提示你想要的convert的编码格式无法识别文件(即编辑器中)的编码,如果还要继续,你会发现你之后无论再怎么convert编辑器和控制台都是乱码,因为此时你无论怎么转换编辑器中的乱码都不会消失,所以控制台输出的自然也是乱码,你就只能手动将乱码删除改为之前的中文了。

当我们在idea控制台输出中文时,有时会遇到控制台输出中文乱码的情况。这是因为控制台默认使用的是ASCII编码,而中文字符集超出了ASCII编码的范围。为了解决这个问题,我们可以尝试以下几种方法: 1.修改IDEA控制台编码 我们可以在IDEA的“Run”->“Edit Configurations”找到相应的配置项,在“VM-options”加上-Dconsole.encoding=UTF-8,这样我们就可以在控制台输出UTF-8编码的中文了。 2.修改系统默认编码 如果第一种方法不起作用,我们可以尝试修改系统默认编码。在Windows系统,我们可以通过修改注册表来修改系统默认编码,具体操作方式为:按Win+R打开运行,输入regedit回车打开注册表,找到HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\JavaSoft\Java Runtime Environment\1.8.0_xxx或HKEY_LOCAL_MACHINE\SOFTWARE\JavaSoft\Java Runtime Environment\1.8.0_xxx(xxx为安装的JDK版本号)节点,在该节点下新建一个String类型的值,命名为JAVA_TOOL_OPTIONS,值为-Dfile.encoding=UTF8。 3.使用UTF-8统一编码 在编写Java程序时,我们可以尽量使用UTF-8编码,这样可以避免输出中文乱码的问题。我们可以在IDEA的“Settings”->“Editor”->“File Encodings”将编码格式设置为UTF-8,这样所有的文件都将使用UTF-8编码。 总之,解决控制台输出中文乱码要视乎具体情况而定,可以尝试上述方法来解决
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

YTC_040518

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值