java查找最小字符集_如何查找Java中的默认字符集/编码?
这真的很奇怪…一旦设置,默认的字符集被缓存,并且在类在内存中时不会改变。使用System.setProperty(“file.encoding”,“Latin-1”)设置“file.encoding”属性;什么也没做。每次调用Charset.defaultCharset()时,它返回缓存的字符集。
这里是我的结果:
Default Charset=ISO-8859-1
file.encoding=Latin-1
Default Charset=ISO-8859-1
Default Charset in Use=ISO8859_1
我使用JVM 1.6虽然。
(更新)
好。我用JVM 1.5重现了你的bug。
看看1.5的源代码,缓存的默认字符集没有被设置。我不知道这是否是一个错误,但1.6更改此实现,并使用缓存的字符集:
JVM 1.5:
public static Charset defaultCharset() {
synchronized (Charset.class) {
if (defaultCharset == null) {
java.security.PrivilegedAction pa =
new GetPropertyAction("file.encoding");
String csn = (String)AccessController.doPrivileged(pa);
Charset cs = lookup(csn);
if (cs != null)
return cs;
return forName("UTF-8");
}
return defaultCharset;
}
}
JVM 1.6:
public static Charset defaultCharset() {
if (defaultCharset == null) {
synchronized (Charset.class) {
java.security.PrivilegedAction pa =
new GetPropertyAction("file.encoding");
String csn = (String)AccessController.doPrivileged(pa);
Charset cs = lookup(csn);
if (cs != null)
defaultCharset = cs;
else
defaultCharset = forName("UTF-8");
}
}
return defaultCharset;
}
当您下次调用Charset.defaultCharset()时将文件编码设置为file.encoding = Latin-1时,会发生什么,因为缓存的默认字符集未设置,它将尝试为名称找到适当的字符集拉丁语-1。找不到此名称,因为它不正确,并返回默认的UTF-8。
至于为什么IO类如OutputStreamWriter返回意想不到的结果,
sun.nio.cs.StreamEncoder(witch被这些IO类使用)的实现对于JVM 1.5和JVM 1.6也是不同的。 JVM 1.6实现基于Charset.defaultCharset()方法,以获取默认编码(如果没有提供给IO类)。 JVM 1.5实现使用不同的方法Converters.getDefaultEncodingName();以获取默认字符集。此方法使用它自己的缓存在JVM初始化时设置的默认字符集:
JVM 1.6:
public static StreamEncoder forOutputStreamWriter(OutputStream out,
Object lock,
String charsetName)
throws UnsupportedEncodingException
{
String csn = charsetName;
if (csn == null)
csn = Charset.defaultCharset().name();
try {
if (Charset.isSupported(csn))
return new StreamEncoder(out, lock, Charset.forName(csn));
} catch (IllegalCharsetNameException x) { }
throw new UnsupportedEncodingException (csn);
}
JVM 1.5:
public static StreamEncoder forOutputStreamWriter(OutputStream out,
Object lock,
String charsetName)
throws UnsupportedEncodingException
{
String csn = charsetName;
if (csn == null)
csn = Converters.getDefaultEncodingName();
if (!Converters.isCached(Converters.CHAR_TO_BYTE, csn)) {
try {
if (Charset.isSupported(csn))
return new CharsetSE(out, lock, Charset.forName(csn));
} catch (IllegalCharsetNameException x) { }
}
return new ConverterSE(out, lock, csn);
}
但我同意这些意见。您不应该依赖此属性。这是一个实现细节。
java查找最小字符集_如何查找Java中的默认字符集/编码?相关推荐
- g++默认字符集utf-8_Java可能使用UTF-8作为其默认字符集
g++默认字符集utf-8 由于基于Java的应用程序通常用于各种各样的操作系统和环境中,因此Java开发人员会遇到与基于字符的输入和输出有关的问题并不少见. 涉及这些问题的博客文章包括<警察的 ...
- java rpm 安装路径_如何查找rpm方式安装的软件路径
首先要申明一下which java是定位不到安装路径的.which java定位到的是java程序的执行路径.网上的资料都是人云亦云,完全不去思考.那么怎么定位到java的安装路径呢?下面我们来看看例 ...
- java查找文件路径_如何查找java路径?
展开全部 Java的路径问题,非常难搞.最近的工作涉及到创建和读取文件的工作,这里我就给大家彻底得解决e69da5e6ba9062616964757a686964616f31333365633838J ...
- java整数的因式分解_如何在Java中找到整数的质数-因式分解
java整数的因式分解 编程课程中的常见家庭作业/任务之一是关于Prime Factorization. 要求您编写一个程序以找到给定整数的素因子 . 一个数字的素数因子是将精确地除以给定数字的所有素 ...
- java原始类型排序_海牛部落 java 系列教程:(5)数组和排序
1 数组 数组是编程语言中最常见的的数据结构,其本身是个引用类型数据. java数组要求所有的数组元素具有相同的数据类型. 一旦数组的初始化完成,数组在内存中所占的空间将被固定下来,数组的长度将不可变 ...
- java a标签正则_正则表达式:java中婚配HTML中a标签中的中文字符
正则表达式:java中匹配HTML中a标签中的中文字符 今天群里一位朋友问到了一个正则表达式的问题,有如下内容: 特432 453543 a1特123你好123吗? 特2 标签中的文字现在要匹配出内容 ...
- java图书凭租_如何通过java一步实现租书系统
package first; import java.util.Scanner; public class Hello { public static void main(String[] args) ...
- java 内部类 加载_举例讲解Java的内部类与类的加载器
内部类 class A { //Inner1 要在 A 初始化后 才能使用,即要被A的对象所调用 class Inner1 { int k = 0; // static int j = 0; //A加 ...
- java 配置文件的路径_详解java配置文件的路径问题
详解java配置文件的路径问题 详解java配置文件的路径问题 各种语言都有自己所支持的配置文件,配置文件中有很多变量是经常改变的.不将程序中的各种变量写死,这样能更方便地脱离程序本身去修改相关变量设 ...
最新文章
- mysqldump远程备份mysql数据库方法
- 微信AI从识物到通用图像搜索的探索揭秘
- CRM软件设计评测点与采集测评点
- 调整谷歌reCAPTCHA大小 How to resize the Google noCAPTCHA reCAPTCHA
- python读取txt中的一列称为_python读取中文txt文本的方法
- php开源Plogger用法
- VISTA中注册表项LEGACY_****的删除--另一种方法:使用psExec
- spss进行灰色关联分析_灰色关联分析模型
- mysql怎么导出insert语句_mysql导出insert语句
- 信息流广告如何操作?(含CPC、OCPC、CPM、eCPM、CTR等)
- ReactJS几款UI框架
- 优思学院|六西格玛管理的经典六步法
- Maxcompute sql 练习题
- Texlive配置华文新魏字体
- python练习题之廖雪峰的官方网站
- 旅行照片剪辑--青岛篇
- 2022.12.8 半导体器件物理
- 计算机内部零件图,计算机绘制典型零件图的应用分析
- 王仕鹏压哨三分 中国1分逆转晋级
- jQuery Accordion插件
热门文章
- HDU 6071 Lazy Running (最短路)
- 用java设计一个二叉树类的结构,二叉树的基本结构以及java实现
- 项目进度计划表_十大项目管理工具模版~
- python有强大吗_python有多强大
- 程序设计基础(c语言),程序设计基础(C语言)
- php钩子的作用,php中的钩子理解及应用实例分析
- 如何调整金格电子章服务器印章_如何利用OA系统进行电子公章、红头文件及打印的管理...
- Net基础篇_学习笔记_第十一天_面向对象(类)
- servlet和jsp中间的交互
- MySQL注射绕过技巧(三)