OS.有一个UTF-8编码的文本文件,用FileReader读取到一个字符串,然后转换字符集:str=new String(str.getBytes(),"UTF-8");结果大部分中文显示正常,但最后仍有部分汉字显示为问号!
Java代码
1.public static List<String> getLines(String fileName){
2. List<String> lines=new ArrayList<String>();
3. try {
4. BufferedReader br = new BufferedReader(new FileReader(fileName));
5. String line = null;
6. while ((line = br.readLine()) != null) {
7. lines.add(new String(line.getBytes("GBK"),"UTF-8"));
8. }
9. br.close();
10. } catch (FileNotFoundException e) {
11. }catch (IOException e) {}
12. return lines;
13. }
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解码,不用再做编码转换。
Java代码
1.public static List<String> getLines(String fileName){
2. List<String> lines=new ArrayList<String>();
3. try {
4. BufferedReader br=new BufferedReader(new InputStreamReader(new FileInputStream(fileName),"UTF-8"));
5. String line = null;
6. while ((line = br.readLine()) != null) {
7. lines.add(line);
8. }
9. br.close();
10. } catch (FileNotFoundException e) {
11. }catch (IOException e) {}
12. return lines;
13. }
分享到:
相关推荐
在文章中,还提供了一些关于 TXT 文件编码格式的信息。TXT 文件有四种编码选项:ANSI、Unicode、Unicode big endian 和 UTF-8。默认情况下,TXT 文件的编码格式是 ANSI 编码,也就是系统的默认编码,通常是 GBK 编码...
要解决Java读取TXT文件中文乱码的问题,关键在于指定正确的编码方式。以下是使用`BufferedReader`和`FileReader`读取UTF-8编码的TXT文件的示例: ```java import java.io.BufferedReader; import java.io....
解决Java读取CSV文件中文乱码问题的步骤如下: 1. **指定字符编码**:在使用`BufferedReader`或者`FileReader`读取文件时,应明确指定编码。例如,使用`InputStreamReader`构造函数可以传入编码类型,如`new ...
解决js运行得出的结果乱码的问题。(只需要发布web项目前将js文件转化一下即可。)
Java 读取 TXT 文本文件时遇到乱码问题通常是由于编码格式不匹配导致的。在 Java 中,当读取文本文件时,默认使用的是平台的默认编码,这在处理某些特定编码的文件时可能会引发乱码。以下是针对这个问题的详细解释和...
JavaScript通过FileReader接口读取文件的知识点主要涵盖了如何使用FileReader对象来读取本地文件系统中的文件,其中重点介绍了使用readAsDataURL方法来预览图片文件。这一过程涉及到前端开发中的文件操作与DOM操作,...
FileReader API是其中的一部分,它允许JavaScript在用户选择文件后,在浏览器内读取文件内容,无需服务器的参与。本知识点主要围绕如何利用H5的FileReader API读取特定的地理数据文件——shp文件,并将数据加载到...
首先,我们需要创建一个`FileReader`对象,指定要读取的TXT文件路径,然后通过`FileReader`创建`BufferedReader`对象。 - 使用`BufferedReader`的`readLine()`方法,可以逐行读取TXT文件的内容。这个方法会返回文件...
本文将深入探讨如何读取和创建CSV文件,并特别关注自动解析文件编码方式这一关键环节。我们将使用Java语言进行示例,同时引入第三方库来辅助处理编码问题。 首先,创建CSV文件的基本过程涉及将数据写入具有特定分隔...
本篇文章将深入探讨如何在IT环境中利用编程语言读取和写入CSV文件。 首先,我们来看读取CSV文件。读取CSV文件通常涉及解析文件内容并将其转换为结构化数据,例如数组或对象。在Python中,我们可以使用内置的`csv`...
Java 读写文件避免中文乱码 Java 语言在读写文件时,经常会 gặp到中文乱码的问题。这是因为 Java 默认使用的...为了避免中文乱码,需要在读取和写入文件时,使用正确的编码方式,并选择合适的编码方式进行编码转换。
Java 读取 TXT 文本文件时遇到乱码问题通常是由于编码格式不匹配导致的。在 Java 中,当读取文本文件时,默认使用的是平台的默认编码,这在处理非 ASCII 字符时可能会出现问题,尤其是当文件采用不同编码(如 UTF-16...
2. **读取txt文件**:使用Java的`BufferedReader`或`FileReader`类读取txt文件。例如: ```java BufferedReader reader = new BufferedReader(new FileReader("input.txt")); String line; while ((line = ...
7. 源码文件编码:确保所有源代码文件使用同一编码,推荐使用UTF-8,这样能避免因源码编码问题引发的编译期乱码。 通过以上方法,我们可以有效地防止和解决Java中的中文乱码问题。然而,每个具体问题可能需要针对性...
2. **指定编码读取文件**:在Java中,使用`BufferedReader`或`FileReader`读取文件时,可以传入一个`Charset`对象来指定编码。例如,如果文件是UTF-8编码,代码应如下所示: ```java FileInputStream fis = new ...
总之,解决Java读取中文文件乱码的关键在于确定正确的文件编码并相应地调整Java代码。同时,良好的编码规范,如统一项目编码为UTF-8,可以避免很多不必要的问题。在实际开发中,应当养成检查文件编码的习惯,避免因...
从给定的文件信息来看,主要关注点在于Java读取TXT文件的代码示例,以及如何处理和操作从TXT文件中读取的数据。下面将详细解释这一知识点。 ### Java读取TXT文件的基本流程 在Java中,读取TXT文件通常涉及以下几个...
3. **编码问题**:读取或写入文件时,需要考虑文件编码问题,避免乱码。 通过以上分析,我们可以了解到Java中读取和写入TXT文件的基本方法及其关键点。这些方法不仅适用于简单的文本文件处理,也可以扩展到更复杂的...