IDEA的乱码与file.encoding = UTF-8

news2024/11/24 16:32:48

file.encoding = UTF-8的作用其实就是使用UTF-8作为文件encoding和decoding时的默认方案。

我们知道存储文本文件时,文本变为二进制时要对文件进行encoding,这是一个字节转字符的过程,转换的具体工作由JAVA的API完成(例如:getBytes(编码方案)方法),但是如果你不提供编码方案,那么JAVA会使用一个默认编码方案完成这个任务。这个默认的编码方案就是JVM的file.encoding设置所规定的编码方案,如果JVM没有设置file.encoding,那么JAVA就使用UTF-8编码方案。

当显示文本时,有一个从二进制“还原”到文本的decoding,也就是字节到字符转换的过程。原则上,encoding时用的编码方案就是decoding时用的编码方案。转换的具体工作由JAVA的API完成(例如:new String(bytes,编码方案)),但是如果你不提供编码方案,那么JAVA会使用一个默认编码方案完成这个任务。这个默认的编码方案就是JVM的file.encoding设置所规定的编码方案,如果JVM没有设置file.encoding,那么JAVA就使用UTF-8编码方案。

最后,文本要在一个“平台”显示,这个平台可能是IDEA的控制台,可能是Windows的CMD窗口,也可能是打印机或者某个文本编辑器中。

好了,以上三个步骤中,任何一个步骤出现了不正确的编码方案,都可能产生乱码。

1. 使用文本编辑器编辑文本文件时,文本文件的编码就是文本编辑器的编码。不同的编辑器使用的默认编码方案是不一样的。Windows记事本是GBK,IDEA、VSCODE默认的是UTF8。那么,一个用GBK编码方案编写的.java文件使用UTF-8编译成.class文件,那么从一开始就错了。

2. 如果是同一个人做的encoding,那当然知道decoding该用什么编码方案。但如果不知道encoding的编码集,那你decoding使用的编码方案就无从选择了。如果不指定就会使用默认的编码方案,不匹配就会出现乱码。

3.呈现文本内容的平台也有自己默认的编码集,比如CMD窗口默认是936(GBK)显示方式,那么一个正确的UTF8字符串在GBK容器中也是无法正确显示的。

接下来,我们就看几个实际的例子体会一下:

1. IDEA中创建一个项目TestCoding.java,在IDEA中设置项目的字符集:

可以看到,IDEA的文本编码编码是UTF-8,file.encoding通过project encoding设置为了UTF-8。

public class TestCoding {
    public static void main(String[] args) throws UnsupportedEncodingException {
        System.out.println("file encoding:"+System.getProperty("file.encoding"));
        String s="AC米兰";
        byte[] bytes = s.getBytes();
        System.out.println(new String(bytes));
    }
}

 下面我运行这个程序,看一看它在IDEA的控制台上输出情况:

 首先控制台上是正确的输出,而且在控制台的右下角我们看到,作为输出内容的容器,控制台使用的是UTF-8。

那么同样的程序,我们看看在控制台编译和输出的效果:

 我们发现,同样的程序,这里出现了乱码。那么根据输出和上面的分析问题出在了哪里?那其实三个步骤都可能出了问题!

1. 可以看到,终端环境下的file encoding居然是GBK。我们的TestCoding.java是UTF8,那么encoding是使用的GBK,这样得到的编码文件TestCoding.class其实是“错误”的。

2.为什么“错误”打了引号,是因为我们decoding时也用了GBK,结果错错得正,又得到了一个GBK的源文件。(其实这是一种幸运,毕竟我是在同一台机器上连续使用默认的方式encoding和decoding)

3.那么被幸运还原的文本内容依然是乱码的终极原因是,容器采用了不同的编码集。

 修正的方式就是将code page从936更正为65001即可。

 

现在修改一下代码和IDEA的配置:

 这个修改实际是将IDEA使用的默认编码方案改为了GBK。

修改代码:

import java.io.UnsupportedEncodingException;

public class TestCoding {
    public static void main(String[] args) throws UnsupportedEncodingException {
        System.out.println("file encoding:"+System.getProperty("file.encoding"));
        String s="AC米兰";
        byte[] bytes = s.getBytes();
        System.out.println(new String(bytes,"UTF-8"));
    }
}

再次运行代码,这一次就出现了乱码:

 那么错误的原因也不用赘述了。

1. 用默认的GBK编码方案encoding用UTF8写出来的TestCoding.java,错误

2.用指定的UTF编码方案,decodingGBK编码的TestCoding.class,错上加错

3.用UTF-8容器显示一个错上加错的文本,当然只能是????

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/47302.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

ACM近年区域赛的所有题型

之前写了个退役文章记录想记录下,但是没有干货,还是给删了,所以前面的是退役小记,后面是我个人写近2年所有区域赛场次记录的题型 目录 退役小记(没兴趣可以不看) 这里简单记下我的acm生涯 省赛和三场区…

MySQL第一弹

目录 一、数据库的基本概念 1、数据 (Data) 2、表 3、数据库 4、数据库管理系统(DBMS) 5、数据库系统 6、DBMS的工作模式如下 二、数据库的发展史 1.第一代数据库(淘汰) 2.第二代数据库(现在用的基本上都是二代) 3.第…

Netty02——Netty 入门

目录1.概述1.1.Netty 是什么?1.2.Netty 的作者1.3.Netty 的地位1.4 Netty 的优势2. Hello World2.1 目标2.2 服务器端2.3 客户端2.4 流程梳理2.5.提示3. 组件3.1 EventLoop3.1.1.概述3.1.2.案例演示3.2 Channel3.2.1.ChannelFuture3.2.2.CloseFuture3.2.3.异步提升的…

火车头采集无分页列表-滚动加载列表采集软件免费

互联网的信息和数据不断攀升,每个人都离不开数据的汇总以及分析,不管是整理数据,还是分析同行的数据。今天小编就教大家如何有效地快速抓取自己想要的网页数据。 不管是列表页的网站,还是滚动加载的网站或者需要登录才能采集的网站…

终于学完了9年资深工程师推荐的Java项目化程序设计案例文档

时间飞逝,转眼间毕业七年多,从事 Java 开发也六年了。我在想,也是时候将自己的 Java 整理成一套体系。 这一次的知识体系面试题涉及到 Java 知识部分、性能优化、微服务、并发编程、开源框架、分布式等多个方面的知识点。 写这一套 Java 面试…

时间序列:时间序列模型---随机游走过程(The Random Walk Process)

本文是Quantitative Methods and Analysis: Pairs Trading此书的读书笔记。 随机游走过程是一种特殊的ARMA序列。从分子运动到股价波动等现象都被建模为随机游走。 随机游走过程是AR(1)序列,而且,时间序列在时刻的值为: 随机游走过程本质上是到当前时间…

【ZYNQ】IP核_DDR4_SDRAM(MIG)的详细介绍

IP核_DDR4_SDRAM的详细介绍内核架构内存控制器本机接口控制与数据路径控制路径数据路径读写合并重新排序组状态机ECCRMW(Read-Modify-Write)流程ECC模块ERROR地址时延ECC端口描述地址奇偶校验Clamshell 拓扑迁移功能MicroBlaze MCS ECCMemory 设置内核设计时钟复位协议描述用户…

libxlsxwriter初体验

C如何写Excel? 大家时间都这么宝贵,没有起因的问题是不值得被优先研究的。这篇博客的起因就是希望找到一个比较合适于C的开源库,用以在C中生成Excel文档。其实C可用的开源Excel库,很多博主都已经撰文提及。例如:# c操…

独立站运营优化方法

一个跨境卖家出海,除了建立独立站,要考虑的核心问题是引流和转型。独立站流量从哪里来?面对多元化的海外市场,如何选择更适合品牌的引流渠道和方式? 米贸搜在与海外主流社交媒体、搜索引擎深度连接的基础上&#xff0…

智翔金泰IPO过会:持续经营风险遭质疑,蒋仁生为实际控制人

11月28日,上海证券交易所科创板上市委员会2022年第 99次审议会议召开,重庆智翔金泰生物制药股份有限公司(下称“智翔金泰”)首发符合发行条件、上市条件和信息披露要求,即获得上市委会议通过。 据了解,上市…

目标检测数据标注项目分析-产品缺陷检测

什么是生产过程中的产品缺陷检测? 生产过程中的缺陷检测是保证产品质量的重要环节。及时发现故障或缺陷,并采取适当的措施,我们可以降低运行和质量相关的风险。但在一般视觉系统中,每个缺陷都必须经过检查及预处理才能被检测到,…

vue Router

Vue项目各文件含义 1.src文件夹 是我们真正敲代码的文件夹, 2.assets放静态资源 3.components放组件 4.App.vue主组件 5.main.js项目的入口文件 Vue Router 在router/index.js路由文件中配置路由,设置路由跳转规则 import Vue from vue import Vu…

Node.js 入门教程 28 Node.js 事件循环

Node.js 入门教程 Node.js官方入门教程 Node.js中文网 本文仅用于学习记录,不存在任何商业用途,如侵删 文章目录Node.js 入门教程28 Node.js 事件循环28.1 介绍28.2 阻塞事件循环28.3 调用堆栈28.4 一个简单的事件循环的阐释28.5 入队函数执行28.6 消息队…

ICC2:Design Planning(03)Power Network Synthesis

在shape block之后,接下来可以做pg规划。power network creation可以分为如下几个部分: 1.Add Power Pad 在规划power mesh之前需要先插power pad,所以要在create abstract阶段load upf,如果规划power mesh时没有power pad,也需要…

Java+JSP基于ssm高校网上教材征订系统-计算机毕业设计

项目介绍 随着高校规模的扩大和教学改革的不断深入,高校的教学和科研水平都在稳步提高,但高校的教材选订环节却仍存在着许多问题。目前,高校的教材选订工作大多采用的是手工方式,不仅费时、费力,而且还存在许多人为的…

Seal库官方示例(二):encoders.cpp解析

补充一个常用的SIMD操作原理 图片来自的Hang Shao的文章。 完整代码 这个代码主要功能是编码明文,使得能够使用更加完整的明文多项式(前一个只用到了一个多项式的常量),也就是SIMD操作。主要包含了两个部分,一个是BG…

Animator动画状态机

1、有限状态机 有限状态机(Finite - state machine, FSM),又称有限状态自动机,简称状态机,是表示有限个状态以及在这些状态之间的转移和动作等行为的数学模型 有限:表示是有限度的不是无限的 状态&#x…

机器人开发--减速机

机器人开发--减速机1 概述介绍功能分类按照传动类型可分为:按照传动级数不同可分为:按照齿轮形状可分为:按照传动的布置形式可分为:应用2 电机使用减速机原因3 RV减速机、谐波减速机 和 行星减速机RV减速机谐波减速机行星减速机蜗轮蜗杆减速机4 机器人各…

社区系统项目复盘-1

文章目录技术架构开发环境开发社区首页技术架构 Spring BootSpring、Spring MVC、MyBatisRedis、Kafka、ElasticsearchSpring Security、Spring Actuator 开发环境 构建工具:Apache Maven 版本:3.6.1集成开发环境:IntelliJ IDEA数据库&…

R3LIVE代码详解(四)

0. 简介 上一节中,我们过完了VIO中的状态预测以及特征点跟踪部分。此时我们已经拿到了光流的特征点信息,而这部分越来越接近我们想要去讲的帧到帧的VIO部分了。这一节,我们将围绕着VIO部分来进行讲解 1. PNP误差更新 我们从之前的博客《经…