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编程中,正确地处理文件的字符集编码至关重要,特别是在读取或写入含有非ASCII字符(如中文、日文、韩文等)的文件时。`cpdetector`是Java中一个常用的库,用于自动检测文件的字符集编码。这个库能够帮助...
1. **指定字符编码**:在使用`BufferedReader`或者`FileReader`读取文件时,应明确指定编码。例如,使用`InputStreamReader`构造函数可以传入编码类型,如`new InputStreamReader(new FileInputStream(file), "UTF-8...
它们接受一个字符集参数,用于将字节流按指定字符集转换为字符流,反之亦然。 六、文件操作 Java的File类提供了文件和目录操作的基本功能,如创建、删除、重命名文件和目录。 七、内存流 ByteArrayInputStream和...
5. 文件读写时,可以使用`FileReader`、`FileWriter`,或者指定字符集的`InputStreamReader`和`OutputStreamWriter`。 6. 在网络通信中,注意设置正确的字符集参数。 以上就是关于Java字符集解码方法的详细说明,...
### Java字符集和编码 #### 一、引言 在探讨Java字符集和编码之前,我们先了解一下为什么在Java编程中需要关注字符集和编码。Java作为一种广泛应用的编程语言,其内部采用的是Unicode编码,这使得Java能够很好地...
4. 指定编码:在读取文件时,通过传递字符集名给`InputStreamReader`构造函数,可以指定读取文件时使用的编码。例如,如果文件是UTF-8编码的,应使用`new InputStreamReader(new FileInputStream(file), "UTF-8")`。...
这意味着如果要从磁盘文件、数据库或网络读取字符数据,需要正确地指定字符集编码。例如,使用 `new String(bytes, "UTF-8")` 来创建字符串对象时,必须确保传入的 `bytes` 数组是按照 UTF-8 编码的,这样解码时才能...
该源码用来输出GB2312字符集内容到指定文件,在学习字符编码时对具体字符范围不太熟悉的朋友可以看一下
这样可以在读取文件的同时指定正确的字符编码,从而避免乱码问题。 ```java import java.io.BufferedReader; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import...
在IT行业中,字符集编码是基础且至关重要的概念,尤其对于Java开发者来说,理解编码机制是处理各种文本数据的关键。本文将围绕“Java字符集编码简记”这一主题,深入探讨相关知识点,并结合标签“源码”和“工具”,...
此外,`FileReader`默认使用平台的默认字符编码,如果你知道文件使用特定的字符集,可以使用`InputStreamReader`并指定字符集,例如: ```java BufferedReader br = new BufferedReader(new InputStreamReader(new ...
在读取CSV文件时,我们需要指定CSV文件的路径、分隔符和字符集。在本例子中,我们使用逗号作为分隔符,GBK字符集来读取CSV文件。读取CSV文件后,我们可以使用getHeaders()方法来获取CSV文件的标题行,并使用read...
在本篇文章中,我们将详细介绍如何使用Java编程语言通过FTP(文件传输协议)实现文件的上传与下载功能,并能够将文件指定上传或下载到特定的服务器目录下。此方法已经过测试验证,能够满足基本的需求,并且代码易于...
`FileReader`默认使用平台默认的字符集,而`BufferedReader`可以显式指定字符集。 9. **文件操作的最佳实践**: - 读取文件时,最好使用`try-with-resources`语句来自动关闭流,以避免资源泄漏。 10. **实际示例*...
为了在Java中进行精确的编码控制,可以使用`InputStreamReader`和`OutputStreamWriter`,它们允许指定字符编码。例如,要读取一个UTF-8编码的文件,可以这样做: ```java FileInputStream fis = new FileInputStream...
`UnicodeReader`可能是一个扩展了`BufferedReader`的类,它允许我们指定一个特定的字符集来读取文件。而`UnicodeInputStream`可能是扩展`InputStreamReader`,它允许我们通过`InputStream`读取特定编码的字节流。 ...
例如,如果你有一个GBK编码的文本文件,你可以使用`InputStreamReader`配合`FileInputStream`读取文件时指定GBK字符集,确保正确解码。 Java的`java.nio`包提供了更高级的字符集处理功能,如`CharsetDecoder`和`...
使用如Log4j时,可以配置输出格式指定字符集。对于System.out.println(),可能需要在运行时配置JVM参数`-Dfile.encoding=WE8DEC`。 9. **处理乱码异常** 当遇到乱码问题时,`java.nio.charset....
`InputStreamReader`和`OutputStreamWriter`允许指定字符集,如`new InputStreamReader(new FileInputStream(file), "UTF-8")`。 3.4. 网络传输 HTTP协议中,Content-Type头可以指定字符集,如`Content-Type: text/...
总结起来,Java的`InputStream`和`FileReader`分别用于处理二进制数据和文本数据的读取,而`InputStreamReader`允许你在读取文件时指定字符编码。在用户界面中选择文件时,尽管`FileDialog`在早期版本中被使用,但...