`

FileReader读取中文txt文件编码丢失问题(乱码)

    博客分类:
  • java
OS 
阅读更多
有一个UTF-8编码的文本文件,用FileReader读取到一个字符串,然后转换字符集:str=new String(str.getBytes(),"UTF-8");结果大部分中文显示正常,但最后仍有部分汉字显示为问号!
public static List<String> getLines(String fileName){
		List<String> lines=new ArrayList<String>();
		try {
			BufferedReader br = new BufferedReader(new FileReader(fileName));
			String line = null;
			while ((line = br.readLine()) != null) {
				lines.add(new String(line.getBytes("GBK"),"UTF-8"));
			}
			br.close();
		} catch (FileNotFoundException e) {
		}catch (IOException e) {}
		return lines;
	}


文件读入时是按OS的默认字符集即GBK解码的,我先用默认字符集GBK编码str.getBytes(“GBK”),此时应该还原为文件中的字节序列了,然后再按UTF-8解码,生成的字符串按理说应该就应该是正确的。

为什么结果中还是有部分乱码呢?
问题出在FileReader读取文件的过程中,FileReader继承了InputStreamReader,但并没有实现父类中带字符集参数的构造函数,所以FileReader只能按系统默认的字符集来解码,然后在UTF-8 -> GBK -> UTF-8的过程中编码出现损失,造成结果不能还原最初的字符。

原因明确了,这个问题解决起来并不困难,用InputStreamReader代替FileReader,InputStreamReader isr=new InputStreamReader(new FileInputStream(fileName),"UTF-8");这样读取文件就会直接用UTF-8解码,不用再做编码转换。
public static List<String> getLines(String fileName){
		List<String> lines=new ArrayList<String>();
		try {
			BufferedReader br=new BufferedReader(new InputStreamReader(new FileInputStream(fileName),"UTF-8"));
			String line = null;
			while ((line = br.readLine()) != null) {
				lines.add(line);
			}
			br.close();
		} catch (FileNotFoundException e) {
		}catch (IOException e) {}
		return lines;
	}
分享到:
评论
3 楼 AFO 2012-02-20  
本人发现用“BufferedReader br = new BufferedReader(new FileReader(fileName));
”出现乱码时可以将原txt文件‘另存为’,这时会看到编码类型,只要改为UTF-8,再试一下就好了!!!
2 楼 apiaoye 2011-11-01  
  谢谢 帮大忙了~
1 楼 贝壳水母 2011-03-04  
帮了一忙

相关推荐

    Java读取TXT文本文件乱码解决方案.doc

    在文章中,还提供了一些关于 TXT 文件编码格式的信息。TXT 文件有四种编码选项:ANSI、Unicode、Unicode big endian 和 UTF-8。默认情况下,TXT 文件的编码格式是 ANSI 编码,也就是系统的默认编码,通常是 GBK 编码...

    彻底解决JAVA读取写入 TXT中文乱码问题 源码

    要解决Java读取TXT文件中文乱码的问题,关键在于指定正确的编码方式。以下是使用`BufferedReader`和`FileReader`读取UTF-8编码的TXT文件的示例: ```java import java.io.BufferedReader; import java.io....

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

    解决Java读取CSV文件中文乱码问题的步骤如下: 1. **指定字符编码**:在使用`BufferedReader`或者`FileReader`读取文件时,应明确指定编码。例如,使用`InputStreamReader`构造函数可以传入编码类型,如`new ...

    解决js文件引起乱码问题

    解决js运行得出的结果乱码的问题。(只需要发布web项目前将js文件转化一下即可。)

    Java读取TXT文本文件乱码解决方案.pdf

    Java 读取 TXT 文本文件时遇到乱码问题通常是由于编码格式不匹配导致的。在 Java 中,当读取文本文件时,默认使用的是平台的默认编码,这在处理某些特定编码的文件时可能会引发乱码。以下是针对这个问题的详细解释和...

    JavaScript通过filereader接口读取文件

    JavaScript通过FileReader接口读取文件的知识点主要涵盖了如何使用FileReader对象来读取本地文件系统中的文件,其中重点介绍了使用readAsDataURL方法来预览图片文件。这一过程涉及到前端开发中的文件操作与DOM操作,...

    H5 FileReader读取shp文件

    FileReader API是其中的一部分,它允许JavaScript在用户选择文件后,在浏览器内读取文件内容,无需服务器的参与。本知识点主要围绕如何利用H5的FileReader API读取特定的地理数据文件——shp文件,并将数据加载到...

    java读取TXT文件入库

    首先,我们需要创建一个`FileReader`对象,指定要读取的TXT文件路径,然后通过`FileReader`创建`BufferedReader`对象。 - 使用`BufferedReader`的`readLine()`方法,可以逐行读取TXT文件的内容。这个方法会返回文件...

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

    本文将深入探讨如何读取和创建CSV文件,并特别关注自动解析文件编码方式这一关键环节。我们将使用Java语言进行示例,同时引入第三方库来辅助处理编码问题。 首先,创建CSV文件的基本过程涉及将数据写入具有特定分隔...

    fileReader_csv_文件读取_

    本篇文章将深入探讨如何在IT环境中利用编程语言读取和写入CSV文件。 首先,我们来看读取CSV文件。读取CSV文件通常涉及解析文件内容并将其转换为结构化数据,例如数组或对象。在Python中,我们可以使用内置的`csv`...

    java读写文件避免中文乱码.docx

    Java 读写文件避免中文乱码 Java 语言在读写文件时,经常会 gặp到中文乱码的问题。这是因为 Java 默认使用的...为了避免中文乱码,需要在读取和写入文件时,使用正确的编码方式,并选择合适的编码方式进行编码转换。

    Java读取TXT文本文件乱码解决方案.docx

    Java 读取 TXT 文本文件时遇到乱码问题通常是由于编码格式不匹配导致的。在 Java 中,当读取文本文件时,默认使用的是平台的默认编码,这在处理非 ASCII 字符时可能会出现问题,尤其是当文件采用不同编码(如 UTF-16...

    maven2项目读取读取多txt文件生成多个xls文件实例

    2. **读取txt文件**:使用Java的`BufferedReader`或`FileReader`类读取txt文件。例如: ```java BufferedReader reader = new BufferedReader(new FileReader("input.txt")); String line; while ((line = ...

    彻底解决中文乱码的问题

    7. 源码文件编码:确保所有源代码文件使用同一编码,推荐使用UTF-8,这样能避免因源码编码问题引发的编译期乱码。 通过以上方法,我们可以有效地防止和解决Java中的中文乱码问题。然而,每个具体问题可能需要针对性...

    彻底解决JAVA读取写入中文乱码的问题

    2. **指定编码读取文件**:在Java中,使用`BufferedReader`或`FileReader`读取文件时,可以传入一个`Charset`对象来指定编码。例如,如果文件是UTF-8编码,代码应如下所示: ```java FileInputStream fis = new ...

    Java读取中文文件出现乱码解决过程.mht

    总之,解决Java读取中文文件乱码的关键在于确定正确的文件编码并相应地调整Java代码。同时,良好的编码规范,如统一项目编码为UTF-8,可以避免很多不必要的问题。在实际开发中,应当养成检查文件编码的习惯,避免因...

    java读取txt文件代码

    从给定的文件信息来看,主要关注点在于Java读取TXT文件的代码示例,以及如何处理和操作从TXT文件中读取的数据。下面将详细解释这一知识点。 ### Java读取TXT文件的基本流程 在Java中,读取TXT文件通常涉及以下几个...

    java读取txt文件

    3. **编码问题**:读取或写入文件时,需要考虑文件编码问题,避免乱码。 通过以上分析,我们可以了解到Java中读取和写入TXT文件的基本方法及其关键点。这些方法不仅适用于简单的文本文件处理,也可以扩展到更复杂的...

Global site tag (gtag.js) - Google Analytics