在JDK 1.4中存在一个有关编码的问题。简要描述如下:
通过参数-Dfile.encoding="charset"设定特定的字符集,但是并不会被当作Reader或者Writer的默认字符集使用。这个问题,有时候会引起隐藏较深的乱码问题。JDK 1.5和1.6中此问题已经不存在,所以,如果遇到在同样默认字符集系统上面运行,基于JDK 1.5正常,基于JDK 1.4则出现乱码问题的时候,注意一下是否由于此问题引起。
(原来JDK 1.4的这个bug在脑子中特别清晰,最近忘了,头两天遇到了,搞了半天~_~。发出来吧,也给大家提个醒)
测试程序如下:
1 public static void main(String[] args) {
2 try {
3 File file = new File("D:/text.txt");
4 file.createNewFile();
5 InputStreamReader reader = new InputStreamReader(new FileInputStream(file));
6 OutputStreamWriter writer = new OutputStreamWriter(new FileOutputStream(file));
7 System.out.println(reader.getEncoding());
8 System.out.println(writer.getEncoding());
9 } catch (IOException e) {
10 e.printStackTrace();
11 }
12 }
【执行环境】
Windows XP中文,默认系统字符集是GBK
启动参数设置:-Dfile.encoding=utf-8
在JDK 1.4.2版本上输出如下:
GBK
GBK
在JDK 1.5.0_09版本上输出如下:
UTF8
UTF8
由以上测试结果可以看出,在JDK 1.4上面,通过参数-Dfile.encoding="charset"设定特定的字符集,但是并不会被当作Reader或者Writer的默认字符集使用在JDK 1.4版本上面,此可能引起很多问题,例如read的部分是由于某开源库完成,则内部实现可能强制采用了-Dfile.encoding的配置;输出由我们自己完成,则默认的writer并不会默认采用-Dfile.encoding的设置,这样解码和编码用的字符集就不一致,可能就会引起乱码问题。
简而言之,在JDK 1.4上开发,在利用字符流编解码需要依赖-Dfile.encoding设置的时候,要注意此问题。
附加说明:
1、可以对InputStreamReader和OutputStreamWriter两个wrapper设定明确的编辑码字符集
2、如果像和当前系统的-Dfile.encoding设置保持绝对一直,可以将System.getProperty("file.encoding")传入InputStreamReader和OutputStreamWriter
分享到:
相关推荐
在Java发展历程中,JDK 1.4是一个重要的里程碑,它为后来的Java版本奠定了基础。这个版本发布于2003年,是Java SE(标准版)的一个关键迭代,引入了许多新特性并优化了现有功能。下面我们将详细探讨JDK 1.4的主要...
1. **异常链**:在JDK 1.4中,引入了异常链机制,允许一个异常捕获另一个异常,并将它们链接在一起,方便开发者跟踪错误源。 2. **正则表达式**:通过`java.util.regex`包,Java 1.4引入了全面的正则表达式支持,极...
标题提到的"jdk1.4 json包 6个全"指的是为Java 1.4版本提供的一个完整的JSON处理库,包含了六个相关的jar文件。 1. **commons-collections.jar**:这是Apache Commons Collections库,提供了大量的集合框架扩展,...
JDK1.4,全称Java Development Kit Version 1.4,是Java编程语言历史上的一个重要版本,由Sun Microsystems(现已被Oracle公司收购)于2002年2月13日正式发布。这个版本在Java平台上引入了许多关键性的改进和新特性...
jdk1.4非安装版,可直接在MyEclipse等IDE工具导入jdk相应的版本。希望对你们有用处。
JDK 1.4是Java历史上的一个重要版本,发布于2004年,它是Java 2平台标准版(J2SE)的一部分。在这个版本中,Java引入了许多新的特性和改进,对于Windows操作系统用户来说,这个版本的JDK在当时的软件开发环境中扮演...
总结,JDK 1.4绿色免安装版是一个便捷的开发工具,尽管已经有些许年代,但它仍能在旧的项目或特定环境中发挥价值,特别是对于需要兼容旧代码或研究历史版本特性的开发者来说,是一个不可或缺的资源。同时,其引入的...
总的来说,JDK 1.4免安装版是Java开发者的一个便利工具,特别是对于需要在旧项目或特定环境中使用JDK 1.4的开发者,它提供了一个快速部署和使用的途径。尽管当前版本已经较为陈旧,但了解其特性和改进对于理解Java的...
JDK1.4是Java开发工具包的一个重要版本,它在Java发展历程中扮演了关键角色。这个版本发布于2002年,带来了许多新的特性和改进,为后续版本奠定了基础。在此源代码中,我们可以深入理解Java语言的实现细节,以及Java...
JDK 1.4虽然并未正式引入泛型,但它是泛型在Java 5中全面引入的一个前兆。泛型允许程序员在编译时检查类型安全,并且所有的强制类型转换都是自动和隐式的,提高了代码的重用性。 **2. 正则表达式(java.util.regex...
之前好些人找我要1.4linux版本,现在分享出来
在这个场景中,可能是指一个兼容JDK 1.4的Axis2构建,因为JDK 1.4是较早的Java版本,而Axis2通常需要更新的JDK版本。 Apache Axis2是Apache SOAP(简单对象访问协议)项目的下一代,它提供了一个高性能、灵活且模块...
JDK 1.4中引入了`java.util.logging`包,提供了一个轻量级的日志框架,让开发者能够灵活地控制应用程序的日志输出。 9. **调试器改进** `jdb`(Java调试器)得到了显著提升,支持更强大的断点、监视点和数据查看...
JDK 1.4,也常被称为 JDK 4,是Java平台的一个重要版本,由Sun Microsystems在2002年发布。这个版本引入了许多关键特性,提升了Java语言的性能、稳定性和安全性,为后续的Java版本奠定了基础。"绿色版本"通常指的是...
在探讨如何在操作系统中同时安装了JDK1.4和JDK1.5的情况下更改环境变量等设置之前,我们先来了解一下JDK的基本概念及其版本更迭的重要性。 ### JDK简介 JDK(Java Development Kit)是Sun Microsystems为Java...
poi3.7与jdk1.4兼容版本,已测试,可用
JDK1.4是Java的一个较早版本,其中不包含一些后来引入的重要特性,如泛型、枚举、注解和增强的for循环。这些特性在Struts2框架中被广泛使用,因此需要进行一些适配工作。 1. **泛型**:Struts2使用泛型来提供类型...
poi-3.8-final-jdk1.4-20120520-rc1.jar