当前位置:编程学习 > JAVA >>

输出流乱码的问题~

package io;

import java.io.BufferedOutputStream;
import java.io.DataOutputStream;
import java.io.FileOutputStream;
import java.io.IOException;

public class IoDemo {
public static void main(String[] args) throws IOException{
FileOutputStream  fos = 
new FileOutputStream("C:/Users/DELL/Desktop/文件输出流测试1.txt");
BufferedOutputStream bos = new BufferedOutputStream(fos);
DataOutputStream dos = new DataOutputStream(bos);
dos.writeUTF("中国");
dos.writeBytes("ab中国");
dos.writeChars("ab中国");
dos.flush();
dos.close();
}
}


文件里出现这样的乱码: 涓浗ab-? a bN-V?

要怎么解决,我已经把文本改为utf-8的编码了,还是出现乱码 --------------------编程问答-------------------- DataOutputStream是字节流,而不是字符流。
应该用字符流来写(FileWriter)

FileWriter fw = new FileWriter("C:/Users/DELL/Desktop/文件输出流测试1.txt");
BufferedWriter bw = new BufferedWriter(fw);
bw.write("中国");
bw.write("ab中国");
bw.write("ab中国");
bw.flush(); --------------------编程问答-------------------- 这样输出的是一个二进制文件,不是文本文件。
使用 Writer。
file -i 文件输出流测试1.txt
文件输出流测试1.txt; application/octet-stream; charset=binary
--------------------编程问答-------------------- 使用字符字节转换流

public class TTTTTTTT {
public static void main(String[] args) throws IOException {
FileOutputStream fos = new FileOutputStream("C:/文件输出流测试1.txt");
BufferedOutputStream bos = new BufferedOutputStream(fos);
OutputStreamWriter osw = new OutputStreamWriter(bos);

//DataOutputStream dos = new DataOutputStream(bos);
osw.write("中国");
/*
dos.writeUTF("中国");
dos.writeBytes("ab中国");
dos.writeChars("ab中国");
dos.flush();
dos.close();
*/
osw.flush();
osw.close();
}
}
--------------------编程问答-------------------- Windows使用的是GB18030编码,而Java使用的是Unicode编码。
Java把文件写到系统硬盘里时,默认会使用系统的编码.
在Window下在你把UTF写入时,就注定了要出现乱码。
不过,看懂下面这个小例子,就可以解决这个问题了。

public class TextFileReader {
    public static void main(String[] args) throws Exception {
        String filename = "source/demo-gb18030.txt";
        String encoding = "gb18030";
        printFile(filename, encoding);
    }

    // 打印出文件的文本内容, 使用指定的编码读入文件
    public static void printFile(String filename, String encoding) throws IOException {
        InputStreamReader isr = new InputStreamReader(new FileInputStream(filename), encoding);
        BufferedReader reader = new BufferedReader(isr);
        String line = null;
        while ((line = reader.readLine()) != null) {
            System.out.println(line);
        }
    }
}
补充:Java ,  Java SE
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,