`

JAVA读写文件指定字符集

阅读更多


JAVA读取和写入文件时如果不指定字符集,那么都是采用操作系统默认的字符集.当我们在Windows平台上创建一个文件包含有中文,然后在Linux 平台下用JAVA读出来,那么很有可能会出现乱码.这是因为:在Windows中文版平台下,系统的默认字符集为GB18030,而且Linux的则为 UTF-8.如果我们不使用其它工具,一般来说,一个文件是用什么字符集写的,那么应该用同样的字符集才能不出错地读出来,当然字符集兼容的情况例外(跟乱码无关,不讨论).扯了这么多,无非就是想说读取文件和书写文件时都可以指定字符集可以解决乱码. 
  读文件: 
InputStreamReader isr = new InputStreamReader(new FileInputStream( 
                filePath), charsetName); 

  写文件: 
OutputStreamWriter osw = new OutputStreamWriter(new FileOutputStream( 
                filePath), charsetName); 

但是,很多情况下,文件可能是由其它工具导出的,我们并不知道文件的字符集是什么.尤其出现在WEB导入导出中,经常是客户端是Windows,服务器是 Linux,solaris,AIX或其它.这时由客户端生成的文件导入到服务器上,如果需要对其内容进行分析的话,就很可能会陷入乱码困境.有没有办法能够根据文件的内容来判断该文件的字符集呢?似乎没有能够完全准确判断的.网上说能够根据文件的头几个字节来判断,如以"0xEF0xBB 0xBF"开头文本文件的为"UTF-8″格式等,但这种判断只局限于文件有BOM(Byte Order Mark,根据字符集玩的一个小聪明)情况下,如果文件没有BOM,那么得到以"UTF-8"编码的文件的前三个字节就不一定是"EF,BB,BF",故该方法不能用来判断一个文件字符集.有一种比较可取的方法就是Mozilla出了一个开源的包--"chardet",在sourceforge.net 上可以下到,不过目前这个网站好像被封了,只能Google或百度了.通过该包能够得出一个文件可能字符集.也不一定全准(Windows的记事本也能得判断文件的字符集,而且也不能全准,最著名的就是不能判断"联通"两个字,用记事本写这两个字,保存,再打开就是乱码,除非你指定字符集),有兴趣可以研究一下.总的说来,chardet应该是一个比较好的解决方案了.

分享到:
评论

相关推荐

    Java输出GB2312字符集内容

    该源码用来输出GB2312字符集内容到指定文件,在学习字符编码时对具体字符范围不太熟悉的朋友可以看一下

    Java文件读写操作函数实现

    如果不指定字符集编码,该解码过程将使用平台默认的字符编码,如:GBK。 * * 构造方法: * * InputStreamReader isr = new InputStreamReader(InputStream * in);//构造一个默认编码集的InputStreamReader类 ...

    不同字符编码集的文件读取

    Unicode、UTF-8格式、Unicode big endian格式的文件读取

    JAVA上百实例源码以及开源项目

    Java读写文本文件的示例代码 1个目标文件。 java俄罗斯方块 一个目标文件。 Java非对称加密源码实例 1个目标文件 摘要:Java源码,算法相关,非对称加密  Java非对称加密源程序代码实例,本例中使用RSA加密技术,...

    java源码包---java 源码 大量 实例

    Java读写文本文件的示例代码 1个目标文件。 java俄罗斯方块 一个目标文件。 Java非对称加密源码实例 1个目标文件 摘要:Java源码,算法相关,非对称加密  Java非对称加密源程序代码实例,本例中使用RSA加密技术,...

    java源码包4

    Java读写文本文件的示例代码 1个目标文件。 java俄罗斯方块 一个目标文件。 Java非对称加密源码实例 1个目标文件 摘要:Java源码,算法相关,非对称加密  Java非对称加密源程序代码实例,本例中使用RSA加密技术...

    java源码包3

    Java读写文本文件的示例代码 1个目标文件。 java俄罗斯方块 一个目标文件。 Java非对称加密源码实例 1个目标文件 摘要:Java源码,算法相关,非对称加密  Java非对称加密源程序代码实例,本例中使用RSA加密技术...

    JAVA上百实例源码以及开源项目源代码

    Java读写文本文件的示例代码 1个目标文件。 java俄罗斯方块 一个目标文件。 Java非对称加密源码实例 1个目标文件 摘要:Java源码,算法相关,非对称加密  Java非对称加密源程序代码实例,本例中使用RSA加密技术,...

    java源码包2

    Java读写文本文件的示例代码 1个目标文件。 java俄罗斯方块 一个目标文件。 Java非对称加密源码实例 1个目标文件 摘要:Java源码,算法相关,非对称加密  Java非对称加密源程序代码实例,本例中使用RSA加密技术...

    成百上千个Java 源码DEMO 4(1-4是独立压缩包)

    Java读写文本文件的示例代码 1个目标文件。 java俄罗斯方块 一个目标文件。 Java非对称加密源码实例 1个目标文件 摘要:Java源码,算法相关,非对称加密 Java非对称加密源程序代码实例,本例中使用RSA加密技术,定义...

    java jdk8 学习笔记

    5.java指令的目的是启动jvm,然后执行指定的执行文件(.class)。windows系统的可执行文件是.exe和.bat ,Linux系统的可执行文件是有执行权限的文档。 6.java -cp/-classpath .;C:\workspace;C:\lib\abc.jar ...

    成百上千个Java 源码DEMO 3(1-4是独立压缩包)

    Java读写文本文件的示例代码 1个目标文件。 java俄罗斯方块 一个目标文件。 Java非对称加密源码实例 1个目标文件 摘要:Java源码,算法相关,非对称加密 Java非对称加密源程序代码实例,本例中使用RSA加密技术,定义...

    JAVA面试题最全集

    如何读写文件 7.Java多态的实现(继承、重载、覆盖) 8.编码转换,怎样实现将GB2312编码的字符串转换为ISO-8859-1编码的字符串。 9.Java中访问数据库的步骤,Statement和PreparedStatement之间的区别。 10.找出...

    java范例开发大全源代码

     实例141 按顺序读取文件 211  实例142 追加文件内容 211  实例143 只显示文件中指定的字符 214  实例144 读取jar包文件 215  实例145 文件的加密/解密操作 217  实例146 复制图片 219  实例147 ...

    java范例开发大全

    实例141 按顺序读取文件 211 实例142 追加文件内容 211 实例143 只显示文件中指定的字符 214 实例144 读取jar包文件 215 实例145 文件的加密/解密操作 217 实例146 复制图片 219 实例147 随机读写Java类文件 221 第3...

    java开源包11

    fat32-lib 是一个用来读写 FAT 16/32 格式文件系统的纯 Java 类库(纯的)。 Eclipse的HTML格式化插件 Eclipse Tidy Eclipse HTML Tidy 是一款 Eclipse 的插件,用来对 HTML 文件内容进行清洗和格式化处理。它采用...

    java开源包6

    fat32-lib 是一个用来读写 FAT 16/32 格式文件系统的纯 Java 类库(纯的)。 Eclipse的HTML格式化插件 Eclipse Tidy Eclipse HTML Tidy 是一款 Eclipse 的插件,用来对 HTML 文件内容进行清洗和格式化处理。它采用...

    java开源包4

    fat32-lib 是一个用来读写 FAT 16/32 格式文件系统的纯 Java 类库(纯的)。 Eclipse的HTML格式化插件 Eclipse Tidy Eclipse HTML Tidy 是一款 Eclipse 的插件,用来对 HTML 文件内容进行清洗和格式化处理。它采用...

    Java范例开发大全 (源程序)

     实例141 按顺序读取文件 211  实例142 追加文件内容 211  实例143 只显示文件中指定的字符 214  实例144 读取jar包文件 215  实例145 文件的加密/解密操作 217  实例146 复制图片 219  实例147 随机...

Global site tag (gtag.js) - Google Analytics