这真的很奇怪…一旦设置,默认的字符集被缓存,并且在类在内存中时不会改变。使用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中的默认字符集/编码?相关推荐

  1. g++默认字符集utf-8_Java可能使用UTF-8作为其默认字符集

    g++默认字符集utf-8 由于基于Java的应用程序通常用于各种各样的操作系统和环境中,因此Java开发人员会遇到与基于字符的输入和输出有关的问题并不少见. 涉及这些问题的博客文章包括<警察的 ...

  2. java rpm 安装路径_如何查找rpm方式安装的软件路径

    首先要申明一下which java是定位不到安装路径的.which java定位到的是java程序的执行路径.网上的资料都是人云亦云,完全不去思考.那么怎么定位到java的安装路径呢?下面我们来看看例 ...

  3. java查找文件路径_如何查找java路径?

    展开全部 Java的路径问题,非常难搞.最近的工作涉及到创建和读取文件的工作,这里我就给大家彻底得解决e69da5e6ba9062616964757a686964616f31333365633838J ...

  4. java整数的因式分解_如何在Java中找到整数的质数-因式分解

    java整数的因式分解 编程课程中的常见家庭作业/任务之一是关于Prime Factorization. 要求您编写一个程序以找到给定整数的素因子 . 一个数字的素数因子是将精确地除以给定数字的所有素 ...

  5. java原始类型排序_海牛部落 java 系列教程:(5)数组和排序

    1 数组 数组是编程语言中最常见的的数据结构,其本身是个引用类型数据. java数组要求所有的数组元素具有相同的数据类型. 一旦数组的初始化完成,数组在内存中所占的空间将被固定下来,数组的长度将不可变 ...

  6. java a标签正则_正则表达式:java中婚配HTML中a标签中的中文字符

    正则表达式:java中匹配HTML中a标签中的中文字符 今天群里一位朋友问到了一个正则表达式的问题,有如下内容: 特432 453543 a1特123你好123吗? 特2 标签中的文字现在要匹配出内容 ...

  7. java图书凭租_如何通过java一步实现租书系统

    package first; import java.util.Scanner; public class Hello { public static void main(String[] args) ...

  8. java 内部类 加载_举例讲解Java的内部类与类的加载器

    内部类 class A { //Inner1 要在 A 初始化后 才能使用,即要被A的对象所调用 class Inner1 { int k = 0; // static int j = 0; //A加 ...

  9. java 配置文件的路径_详解java配置文件的路径问题

    详解java配置文件的路径问题 详解java配置文件的路径问题 各种语言都有自己所支持的配置文件,配置文件中有很多变量是经常改变的.不将程序中的各种变量写死,这样能更方便地脱离程序本身去修改相关变量设 ...

最新文章

  1. mysqldump远程备份mysql数据库方法
  2. 微信AI从识物到通用图像搜索的探索揭秘
  3. CRM软件设计评测点与采集测评点
  4. 调整谷歌reCAPTCHA大小 How to resize the Google noCAPTCHA reCAPTCHA
  5. python读取txt中的一列称为_python读取中文txt文本的方法
  6. php开源Plogger用法
  7. VISTA中注册表项LEGACY_****的删除--另一种方法:使用psExec
  8. spss进行灰色关联分析_灰色关联分析模型
  9. mysql怎么导出insert语句_mysql导出insert语句
  10. 信息流广告如何操作?(含CPC、OCPC、CPM、eCPM、CTR等)
  11. ReactJS几款UI框架
  12. 优思学院|六西格玛管理的经典六步法
  13. Maxcompute sql 练习题
  14. Texlive配置华文新魏字体
  15. python练习题之廖雪峰的官方网站
  16. 旅行照片剪辑--青岛篇
  17. 2022.12.8 半导体器件物理
  18. 计算机内部零件图,计算机绘制典型零件图的应用分析
  19. 王仕鹏压哨三分 中国1分逆转晋级
  20. jQuery Accordion插件

热门文章

  1. HDU 6071 Lazy Running (最短路)
  2. 用java设计一个二叉树类的结构,二叉树的基本结构以及java实现
  3. 项目进度计划表_十大项目管理工具模版~
  4. python有强大吗_python有多强大
  5. 程序设计基础(c语言),程序设计基础(C语言)
  6. php钩子的作用,php中的钩子理解及应用实例分析
  7. 如何调整金格电子章服务器印章_如何利用OA系统进行电子公章、红头文件及打印的管理...
  8. Net基础篇_学习笔记_第十一天_面向对象(类)
  9. servlet和jsp中间的交互
  10. MySQL注射绕过技巧(三)