Java中对字符串等进行转换字节数组时, 需要根据字符集编码来进行转换, 当不显示的指定字符集编码时(如: "测试".getBytes()), 会使用Charset.defaultCharset()获取到的字符集编码进行转换!

相关代码如下:

上面的代码可以看出, 在JVM中defaultCharset()是在初始化阶段被调用, 且只会初始化一次, 首先会取file.encoding指定的字符集, 如果取不到则使用系统默认字符集(如: windows下为GBK), 然后通过

取到的字符集名称(csn)去获取Charset对象, 如果能获取到则将其设为defaultCharset, 如果取不到则将defaultCharset设置为UTF-8字符集, defaultCharset一旦被初始化后, 在JVM之后的运行过程中

就无法再进行更改, 比如在JVM启动后在程序中使用properties.setProperty("file.encoding","UTF-8");也不会改变defaultCharset的值~~~

如果想指定defaultCharset的值, 则可以通过JVM启动参数(-Dfile.encoding="UTF-8")来显示的指定此JVM的字符集!!!

拓展内容:

Charset name属性的命名规范如下:

  • 大写字母 'A''Z''\u0041' 到 '\u005a'),
  • 小写字母 'a''z''=pos;  到  ' apos;),
  • 数字 '0''9''\u0030'  到  '\u0039'),
  • 短划线字符 '-''\u002d',连词符号),
  • 句点字符 '.'('\u002e',句点),
  • 冒号字符 ':'('\u003a',冒号),和
  • 下划线字符 '_''\u005f',下划线)。

Charset 名称必须以字母或数字开头。空字符串不是合法的 charset 名称。Charset 名称是大小写不敏感的,也就是当比较 charset 名称时总是忽略大小写。

每个 charset 有一个规范名称,也可能有一个或多个别名。规范名称由此类的 name 方法返回。根据约定,规范名称通常是大写的。charset 的别名由 aliases 方法返回。

一些 charset 有一个历史名称,定义这个名称是为了和以前版本的 Java 平台兼容。charset 的历史名称既可以是它的规范名称,也可以是它的某个别名。历史名称由 InputStreamReaderOutputStreamWriter 类的 getEncoding() 方法返回。

Java 虚拟机的每个实例都有默认的 charset,它可能是也可能不是某个标准 charset。默认 charset 在虚拟机启动时决定,通常根据语言环境和底层操作系统使用的 charset 来确定。

转载于:https://www.cnblogs.com/brucecloud/p/6375471.html

Java虚拟机(JVM)默认字符集详解相关推荐

  1. java虚拟机编码格式_Java虚拟机(JVM)默认字符集详解

    Java中对字符串等进行转换字节数组时, 需要根据字符集编码来进行转换, 当不显示的指定字符集编码时(如: "测试".getBytes()), 会使用Charset.default ...

  2. [java] 虚拟机(JVM)底层结构详解[转]

    [java] 虚拟机(JVM)底层结构详解[转] 本文来自:曹胜欢博客专栏.转载请注明出处:http://blog.csdn.net/csh624366188 在以前的博客里面,我们介绍了在java领 ...

  3. Java虚拟机中类加载机制详解

    Java虚拟机中类加载机制详解 1,什么是java类加载机制 **首先在java中,是通过编译来生成.class文件(可能在本地,或者网页下载),java的类加载机制就是 将这些.class文件加载到 ...

  4. Java虚拟机之垃圾回收详解一

    Java虚拟机之垃圾回收详解一 Java技术和JVM(Java虚拟机) 一.Java技术概述: Java是一门编程语言,是一种计算平台,是SUN公司于1995年首次发布.它是Java程序的技术基础,这 ...

  5. linux系统——mysql数据库默认字符集详解

    linux系统--mysql数据库默认字符集详解 - mysql的字符集配置细化到四种 对数据库server配置 对库设置 对表设置 对列设置 - 对mysql-server设置 对server设置是 ...

  6. java虚拟机启动参数分类详解

    HotSpot是较新的Java虚拟机技术,用来代替JIT(Just in Time)技术,可以大大提高Java运行的性能.Java原先是把源代码编译为字节码在虚拟机执行,这样执行速度较慢.而该技术将常 ...

  7. Java虚拟机:类加载机制详解

    版权声明:本文为博主原创文章,转载请注明出处,欢迎交流学习! 大家知道,我们的Java程序被编译器编译成class文件,在class文件中描述的各种信息,最终都需要加载到虚拟机内存才能运行和使用,那么 ...

  8. 深入理解Java虚拟机——JVM垃圾回收机制和垃圾收集器详解

    一:概述 说起垃圾回收(Garbage Collection,GC),很多人就会自然而然地把它和Java联系起来.在Java中,程序员不需要去关心内存动态分配和垃圾回收的问题,顾名思义,垃圾回收就是释 ...

  9. JVM调优系列--Java命令选项(参数)--大全/详解/常用

    原文网址:JVM调优系列--Java命令选项(参数)--大全/详解/常用_IT利刃出鞘的博客-CSDN博客 简介 说明        本文介绍Java的java命令用法,包括:常用用法.选项大全. J ...

最新文章

  1. 《javascript设计模式》笔记之第十章 和 第十一章:门面模式和适配器模式
  2. 【Android 高性能音频】Oboe 开发流程 ( Oboe 完整代码示例 )
  3. SOFA 源码分析 — 链路数据透传
  4. AIC-赤池信息准则、BIC-贝叶斯信息准则
  5. 在SAP API hub自动生成使用ABAP调用API的胶水代码
  6. 树莓派安装ArchLinux
  7. 如何卸载IE7重装IE6
  8. Python数据类型(3)
  9. Hbase预分区入门
  10. VC最常见的20种VC++编译错误信息
  11. html字体样式微软雅黑,Css样式表中实现微软雅黑字体
  12. 基于百度云AI开发车型识别车牌识别案例详解
  13. javacv截取视频截图-1.5.7版本精简包
  14. FlashFXP 4.2.4 破解版
  15. ado全称_JDBC、ODBC、OLE DB、ADO、ADOMD区别与联系
  16. C#调用触摸屏小键盘
  17. 2022湖南株洲服饰产业数智互联网峰会暨湖南服饰产业互联网高峰论坛成功举办
  18. 光模块价格由带宽还是距离决定_佛山单模光模块价格
  19. NLP预训练模型综述
  20. 永信至诚打造企业安全人才提升方案 补齐企业安全短板

热门文章

  1. cocos creator 数组_CoCos Creator中的数据类型
  2. SecureCRT 中文乱码问题
  3. 第二次实验报告(漏)
  4. java基础——equals及==的区别
  5. GJM : Unity3D HIAR -【 快速入门 】 三、导入 SDK
  6. 第一次Sprint总结
  7. C++处理一个动态规划的问题
  8. 谈自动化测试与CI中一些常见的谬见
  9. 中通滤波matlab,如何用MATLAB将低通改成中通滤波器
  10. sql-bench mysql_MySQL性能测试(一)——RHEL 7.1, MySQL 5.6.25, sql-bench