package com.softstone.io;import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.OutputStreamWriter;
import java.io.Writer;public class TestCharset { public static void main(String[] args) throws Exception {
String path = "i:" + File.separator + "file.txt";
InputStream is = new FileInputStream(new File(path));
byte[] b = new byte[8];
Writer out = new OutputStreamWriter(new FileOutputStream(new File(path)));
byte[] b2 = "中".getBytes("utf8");
out.write(new String(b2, "utf8"));
out.flush();
int i = is.read(b);
do {
for (int j = 0; j < i; j++) {
System.out.println(b[j]);
}
System.out.println(i);
System.out.println(i + "--" + new String(b, 0, i, "utf8"));
} while ((i = is.read(b)) != -1);
}
}
问题:
为什么结果会是乱码呢?写数据和读数据的编码都统一了,怎么还会出现乱码呢?
望指点
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.OutputStreamWriter;
import java.io.Writer;public class TestCharset { public static void main(String[] args) throws Exception {
String path = "i:" + File.separator + "file.txt";
InputStream is = new FileInputStream(new File(path));
byte[] b = new byte[8];
Writer out = new OutputStreamWriter(new FileOutputStream(new File(path)));
byte[] b2 = "中".getBytes("utf8");
out.write(new String(b2, "utf8"));
out.flush();
int i = is.read(b);
do {
for (int j = 0; j < i; j++) {
System.out.println(b[j]);
}
System.out.println(i);
System.out.println(i + "--" + new String(b, 0, i, "utf8"));
} while ((i = is.read(b)) != -1);
}
}
问题:
为什么结果会是乱码呢?写数据和读数据的编码都统一了,怎么还会出现乱码呢?
望指点
当然,你现在的输出的file.txt 找一个支持不使用BOM头的文本编辑器就可以正确查看,比如Notepad2
public class TestCharset { public static void main(String[] args) throws Exception {
String path = "e:" + File.separator + "file.txt";
InputStream is = new FileInputStream(new File(path));
byte[] b = new byte[8];
Writer out = new OutputStreamWriter(new FileOutputStream(new File(path)));
byte[] b2 = "中".getBytes();
out.write(new String(b2, "GBK"));
out.flush();
out.close();
int i = is.read(b);
do {
for (int j = 0; j < i; j++) {
System.out.println(b[j]);
}
System.out.println(i);
System.out.println(i + "--" + new String(b,"GBK"));
} while ((i = is.read(b)) != -1);
is.close();
}
}