`

Java文件流 编码问题 - 读取文件时指定字符编码

 
阅读更多

  折磨了一天的问题,终于在黄昏的时候解决了,现在一吐为快。

 

    众所周知,java的中文问题一直是一个老大难的问题,这个现象可以在csdn中java论坛里关于中文乱码的提问率就可以了解到,甚至软件巨人IBM专门开辟了一个解决中文问题的专区,作为一个俗人(一直梦想希望想金凯利那样成为一个“冒牌天神”,只是一直没有成功,也许是因为上帝不照顾中国吧),我也为同意的问题困扰,好在今天解决了。

 

    随着我对.net平台的彻底放弃(只是生活所迫,毕竟我还要生活),将原有的资源转到Java平台上来是我当前的一个重要任务之一,说到这里,不得不承认.net对中文问题解决的很好,虽然偶尔也会出现乱码。

 

    问题是这样的,我的box(http://www.ibeyond.org/box/)原来是使用asp.net写的(当时只是为了尝试新的技术),当时为了数据的可移植性我放弃了使用数据库,将全部数据保存为UTF-8编码的文本文件,在.net中读取这种文件秩序只要指定打开文件的编码方式,中文问题就可以避免。但是按照我以前的思维,java中不是这么作的,java中都是先读取后转换的,最后的结果证明我错了,看来经验主意害死人呀。

 

File f=new File((new BoxConfig()).getBaseDir()+"Data\\"+request.getParameter("ID")+".inc");

 

BufferedReader reader = new BufferedReader(new FileReader(f));

 

String line;

 

while((line=reader.readLine())!=null){

 

  strContent+=line;

 

}

 

这是我最初的代码f就是我要读取的UTF-8格式的文本文件,这一天中经过了无数次的尝试,包括new String(strContent.getBytes("UTF-8"))(其中尝试了N种编码转换),System.setProperty("file.encoding","UTF-8")(其中指定了N种编码转换),都失败了,其中甘苦相信各位经历过被程序折磨的各位看官都有所了解,在此略过。终于在Google中无数次查询中得到了一个后来被证明很重要的一条信息“读取文件时指定字符编码”,一语点醒梦中人,.net中不就是这么实现的吗?走了一圈弯路终于解决了这个问题。

 

File f = new File("E:\\eclipse\\workspace\\box\\Data\\2003-3-7-100.inc");

 

InputStreamReader read = new InputStreamReader (new FileInputStream(f),"UTF-8");

 

BufferedReader reader=new BufferedReader(read);

 

String line;

 

while ((line = reader.readLine()) != null) {

 

System.out.println(line);

 

}

 

通过打开文件是指定文件编码的方法把这个问题轻松的解决了。

 

  最后总结一下:java要读取数据流的时候一定要指定数据流的编码方式(至少读取String流的时候要这么作。

 

  你也许可以通过Http://www.ibeyond.org/得到相关信息,你也可以通过csdn@ibeyond.org和我联系。

 

  本文的版权归iBeyond所有,转载时请注明转载出处。

分享到:
评论

相关推荐

    java读写csv文件,中文乱码问题

    - 解决Java处理CSV文件时的中文乱码问题,关键在于正确指定字符编码。 - 要注意文件的读取、写入以及处理过程中的编码一致性。 - 使用专门的CSV处理库能简化操作,并提供更好的兼容性。 - 对于复杂情况,了解并...

    Java判断文件编码格式 - 明明是悟空 - 博客园1

    在Java编程中,判断文件编码格式是一项常见的任务,特别是在处理包含多国语言或者用户自定义内容的文件时。本文将探讨如何使用Java进行文件编码格式的识别,主要介绍两种方法:一种是简单的UTF-8判断,另一种是使用...

    如何使用Java代码获取文件、文件流或字符串的编码方式.zip

    本工程用于研究如何使用Java代码获取文件、文件流或字符串的编码方式 本工程编码方式:UTF-8 开发工具:MyEclipse 参考博客:http://blog.csdn.net/gaohuanjie/article/details/43735891

    java文件读取---写入----输出

    需要注意的是,在处理文件读写时,字符编码的问题也很重要。在上述代码中,虽然没有明确指出使用的字符编码,但在实际应用中应考虑使用合适的字符集(如UTF-8),以避免乱码等问题的发生。 通过以上分析可以看出,...

    读取创建CSV文件并自动解析文件编码方式

    在Java中,`java.nio.charset.Charset`类用于表示字符编码,但默认情况下,Java文件读取操作通常假设文件为UTF-8编码。对于其他编码,我们需要借助第三方库如`jcconf`或`ICU4J`来检测编码。 ```java import ...

    java 读取服务器上的某个文件,并解决UTF-8 BOM文件的问号问题

    在Java编程中,读取...总结来说,Java中读取服务器上的UTF-8 BOM文件,需要正确设置字符编码,检测并处理BOM,同时注意异常处理和资源释放。通过掌握这些知识点,开发者可以编写出稳定、高效的代码来处理这类问题。

    Java避免UTF-8的csv文件打开中文出现乱码的方法

    然而,在Java中读取和写入csv文件时,中文字符如果不正确地处理,可能会出现乱码的情况。下面我们将详细介绍Java避免UTF-8的csv文件打开中文出现乱码的方法。 首先,需要了解UTF-8和UTF-16LE这两种编码格式。UTF-8...

    java读取文件方法大全

    根据给定的文件信息,我们可以总结出一系列关于Java中读取文件的方法,这些方法涵盖了不同层次的数据读取,包括字节、字符以及行级别的读取。以下是对这些知识点的详细阐述: ### Java读取文件方法大全:读取File流...

    java读取文件中文乱码

    在Java编程中,读取包含中文字符的文件时可能会遇到乱码问题,这通常是由于编码格式不匹配导致的。要解决这个问题,我们需要理解文件的原始编码格式,并在Java代码中正确地设置字符集。以下是一些相关的知识点: 1....

    Java解决UTF-8的BOM问题

    在某些情况下,BOM可能会引起问题,例如在读取文本文件时,可能会导致额外的乱码字符出现在文件的开头。本文将深入探讨如何使用Java来处理带有BOM的UTF-8文件。 首先,`UnicodeInputStream`和`UnicodeReader`是Java...

    Java乱码问题

    综上所述,Java乱码问题主要是由字符编码不一致造成的。通过上述方法,我们可以有效地解决这类问题。需要注意的是,在实际开发中,为了减少类似问题的发生,建议始终使用统一的编码格式(如UTF-8),并在项目中明确...

    Java判断文件的编码

    1. **UTF-8**:一种可变长度的字符编码,适用于所有Unicode字符,它通过使用一种巧妙的方案来表示各种字符,使得常见的ASCII字符集可以用单字节表示。 2. **GBK**:全称《汉字内码扩展规范》,是中华人民共和国国家...

    java 编码 UTF-8、ISO-8859-1、GBK

    例如,读取文本文件时,应使用`InputStreamReader`和合适的编码参数,如`new InputStreamReader(new FileInputStream(file), "UTF-8")`。 总结,理解并正确处理Java中的字符编码问题,需要关注整个数据流程,从...

    JAVA中文字符编码问题详解.doc

    2. 用 eclipse 编译和运行 JAVA 文件时,需要指定正确的字符编码类型。 3. 在输出字符时,需要使用正确的字符编码方式来输出字符数据。 四、结论 JAVA 中文字符编码问题是一个复杂的问题,但了解其机理和解决方案...

    java 统计指定文件中的字符个数

    在Java编程语言中,统计指定文件中的字符个数是一项常见的任务,这主要涉及到文件I/O操作和字符流处理。下面将详细讲解如何实现这个功能,以及相关的重要知识点。 首先,要进行文件I/O操作,Java提供了`java.io`包...

    java 读取文件 文件读取操作

    这样可以处理字符编码问题,例如UTF-8。以下是如何按字符读取文件的例子: ```java Reader reader = new InputStreamReader(new FileInputStream(fileName)); int tempchar; while ((tempchar = reader.read())...

    java 文件编码转换

    这种技术在处理非UTF-8编码的文件时非常关键,因为如果没有正确识别源编码,直接读取可能会导致乱码。 其次,`FileCharsetDetector.java`很可能是实现文件编码检测和转换的Java源代码文件。在这个类中,开发者可能...

    Java学习IO流小结--字符流

    - **字符输入流**:用于读取字符数据。 - **字符输出流**:用于写出字符数据。 字符流的主要基类为`java.io.Reader`和`java.io.Writer`。其中: - `java.io.Reader`类是所有字符输入流的父类。 - `java.io.Writer`...

    java_字符编码 Javajava_字符编码问题

    在深入探讨 Java 字符编码的问题之前,我们先来了解一下字符编码的基本概念。字符编码是计算机内部表示字符的一种方式,它涉及到如何将人类可读的文字转换为二进制形式以便计算机处理。 #### 二、Java中的字符串与...

Global site tag (gtag.js) - Google Analytics