博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Java虚拟机(JVM)默认字符集详解
阅读量:5123 次
发布时间:2019-06-13

本文共 1257 字,大约阅读时间需要 4 分钟。

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

你可能感兴趣的文章
Xamarin XAML语言教程构建进度条ProgressBar
查看>>
iOS 9应用开发教程之iOS 9新特性
查看>>
在ASP.NET Core使用Middleware模拟Custom Error Page功能
查看>>
swfit-学习笔记(数组的使用)
查看>>
对自己的忠告
查看>>
2019CCPC湖南全国邀请赛-Chika and Friendly Pairs- 莫队+树状数组+离散化
查看>>
同步和异步简述
查看>>
XP Embedded:不同的用户使用不同的外壳程序
查看>>
如何生成JAR包
查看>>
CTabCtrl控件标签的相关设置
查看>>
python --条件判断和语句控制
查看>>
面向对象的四大特征
查看>>
Leetcode 206. Reverse Linked List
查看>>
九度oj题目1518:反转链表
查看>>
jsonp跨域请求响应结果处理函数(python)
查看>>
[poj3321]Apple Tree_dfs序_树状数组
查看>>
面向对象:包装类、对象处理、类成员
查看>>
2018.09.15 vijos1053Easy sssp(最短路)
查看>>
2018.10.20 NOIP模拟 蛋糕(线段树+贪心/lis)
查看>>
学习进度13
查看>>