IDEA控制台乱码原理性深入研究分析与解决方案

本文深入研究了Java IDEA控制台乱码的原理,分析了可能的编码配置,包括源代码、JVM参数、console.encoding、log4j等,并提供了针对性的解决方案,强调正确配置log4j编码的重要性,以及使用-Dfile.encoding参数解决乱码问题。
摘要由CSDN通过智能技术生成

关于这个控制台乱码问题, 最初我都是随便配置了一些编码, 只要使日志正常显示之后就不再管它了, 但是最近遇到了各种奇葩的乱码问题, 尤其是帮别的项目或帮同事处理代码问题的时候, 乱码问题真的是五花八门, 群魔乱舞, 于是我抽了个周末好好研究了下乱码这个问题, 在此做下记录, 方便大家处理乱码问题

本篇研究以Java为代码, 集成开发环境为IDE, 操作系统为 window10

简单分析可能造成乱码的原因

首先我们要知道什么是乱码, 简而言之乱码就是文件打开的编码方式和文件本身编码方式不对, 注意这个地方有两个编码, 一个是文件本身的编码, 一个是用什么编码打开文件, 两个编码不对应, 就会出现乱码.

例如以下图片(控制台乱码)

在这里插入图片描述

关于这个 淇℃伅, 我可以明确告诉你们这个是UTF-8编码信息, 那为什么会显示成淇℃伅呢, 是因为控制台以 GBK的方式显示UTF-8编码.


深入分析乱码原理

1. 首先让我们列举下我们可能用到的编码有哪些

编码 解释
GBK 汉字内码扩展规范, 向下与 GB 2312 编码兼容,向上支持 ISO 10646.1国际标准,window中国区默认编码
UTF-8 针对Unicode的一种可变长度字符编码。兼容于ASCII编码, 国际比较通用的编码格式
  1. 在一些编译器里面也许有 ANSI 这种编码, 但实际上 ANSI 并不是特指某一种具体的编码, 这里以window为例, 假如你window电脑的区域和语言是中国, 那么“ANSI编码”实际是GBK编码。当你把它改成Korean(Korea)时,“ANSI编码”实际是EUC-KR编码,当你把它改成English(US)时,“ANSI编码”实际是ASCII编码.
  2. UTF-16 是JDK String 的存储编码, 但一般来说, 你只要不对char数组进行bit解析, 至少你在日志中一般不会碰到UTF-16的情况.
  3. 综上分析, 我们只需要研究下GBKUTF-8 两种编码格式即可.

2. 其次让我们分析下JAVA IDEA开发中涉及到的编码配置可能有哪些

列举所有可能出现的情况大概就以下几种, 先别管对不对, 只要可能的就先列举上

	1. java 源文件编码.
	2. java编译成的class文件编码.
	3. jvm 以什么编码格式运行class文件.
	4. jvm 以什么方式输出日志
	5. 控制台以什么编码格式显示输出日志.
	6. 系统默认编码
	7. log 日志输出编码(log4j, log4j2, logback).

接下来让我们通过问答的方式大家明白几个解释起来比较散乱的常识


Q1: java 源代码会对乱码有影响吗

A: 源文件编码格式对乱码没什么影响

事实上不管你 java 源代码用的是什么编码格式, 编译成的 class 文件都是一样的, 而class文件编码貌似只有一种, 盲猜应该是UTF-16.

下面是我将内容同样而编码格式不同的两份源码编译成的两个class文件属性图, 通过文件算码发现两个class文件完全一致.

  • 23
    点赞
  • 46
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 28
    评论
评论 28
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

逆光影者

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

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

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

打赏作者

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

抵扣说明:

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

余额充值