输出流乱码的问题~
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
--------------------编程问答-------------------- Windows使用的是GB18030编码,而Java使用的是Unicode编码。
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();
}
}
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