问题描述:
博主使用字符流读取D盘ok.txt文件时出现中文乱码的问题。
问题截图:



问题分析:
在window操作系统中文本文件的编码集默认是UTF-8,而Java中使用的编码格式也是UTF-8,与之对应,所以在不对文本文件进行修改的情况下是不会出现中文乱码的情况。仔细检查文本的编码格式发现,不小心修改编码格式为ANSI编码,从编码是国标编码,系统使用的是那个地区的语言就是该地区的国标编码,中文的国标编码的GBK。

问题解决:
方法一:
修改文本编码为UTF-8,解决中文乱码情况。
方法二:
修改源代码,BufferedReader 传入的参数通过InputStreamReader包装成一个字符流。
在InputStreamReader中指定编码格式为gbk。
package com.javaio.transformation;
import java.io.*;
public class CodeQuestion {
public static void main(String[] args) throws IOException {
String filePath = "d://ok.txt";
InputStreamReader inputStreamReader = new InputStreamReader(new FileInputStream(filePath),"gbk");
BufferedReader bufferedReader = new BufferedReader(inputStreamReader);
String s = null;
s = bufferedReader.readLine();
System.out.println(s);
bufferedReader.close();
}
}
问题涉及知识点:
转换流的概念
将字节流转换成字符流。
InputStreamReader:Reader的子类,可以将inputStream(字节流)包转成Reader(字
符流)
OutputStreamWriter:Writer的子类,实现将OutputStream(字节流)包装成Writer(字
符流)
当处理纯文本数据时,如果使用字符流效率更高,并且可以有效解决中文乱码问题,所
以建议将字节流转成字符流。
可以在使用时指定编码格式(比如 UTF-8,gbk,gb2312,ISO8859-1等)。
本文描述了博主在使用Java字符流读取D盘中文文件时遇到的乱码问题,原因是文件编码被误设为ANSI。给出了两种解决办法:一是修改文件编码为UTF-8,二是修改代码中BufferedReader的输入流编码为GBK。讨论了转换流的概念,以及为何在处理文本数据时指定编码的重要性。

1295

被折叠的 条评论
为什么被折叠?



