当前位置: 代码迷 >> J2SE >> 新手读取文件时,输出的中文是乱码,代码如下:求问有关问题出在哪里啊该如何改正
  详细解决方案

新手读取文件时,输出的中文是乱码,代码如下:求问有关问题出在哪里啊该如何改正

热度:36   发布时间:2016-04-24 12:26:16.0
新手求教:读取文件时,输出的中文是乱码,代码如下:求问各位高手问题出在哪里啊?该怎么改正?
import java.io.*;

public class FileIn {
public static void main(String[] args) {
try {
FileInputStream rf = new FileInputStream(
"F:\\100个让心情变好的佛家领悟-佛家感悟.txt");
int b;
while ((b = rf.read()) != -1)
System.out.print((char) b);
rf.close();
} catch (IOException ie) {
System.out.println(ie);
} catch (Exception e) {
System.out.println(e);
}
}
}

------解决方案--------------------
是你取的方法不对,而不是中文乱码,你这里面每次去到的只是一个字节,而UTF8编码的中文是2个字节,肯定无法正常输出中文
Java code
import java.io.*;public class FileIn {    public static void main(String[] args) {        try {            FileInputStream rf = new FileInputStream(                    "F:\\100个让心情变好的佛家领悟-佛家感悟.txt");            BufferedReader br=new BufferedReader(new InputStreamReader(rf));//            int b;//            while ((b = rf.read()) != -1)//                System.out.print((char) b);//            rf.close();            String s="";            while((s=br.readLine())!=null){                 System.out.println(s);            }            br.close();        } catch (IOException ie) {            System.out.println(ie);        } catch (Exception e) {            System.out.println(e);        }    }}
------解决方案--------------------
既然已经能够正常输出中文,那么楼主记得结贴 

看你0结帖率 …… 

探讨
引用:
int b;
while ((b = rf.read()) != -1)
System.out.print((char) b);
rf.close();
}

就算支撑中文,你这个能否打印出正确的字符呢?

这个-1只是一个标志位而已,不是你理解的所谓数值,所以你这个用byte转换能得到什么?


UTF-8编码里,中文是3个字节,能否……

------解决方案--------------------
明确的说,不应该用字节流是 浅薄的说法,至少不确切

FileReader只能用本地操作系统的编码,无法进行转码读取

比如你本地gbk的系统,就无法读取utf8编码的文件

这时候需要用InputStreamReader来做

探讨
读取中文应该用FileReader字符流处理,不应该用字节流:
public class FileIn {
public static void main(String[] args) {
try {
FileReader fr = new FileReader(new BufferedReader(
"F:\\100个让心情变好的佛家领悟-佛家感悟.txt"));
String b;……
  相关解决方案