日期:2014-05-20  浏览次数:20733 次

Java写入中文到文件出现乱码,如何解决?
public static void main(String[] args) throws FileNotFoundException, UnsupportedEncodingException {
FileOutputStream fos = new FileOutputStream("d:\\1.txt");
PrintWriter pw = new PrintWriter(fos);
String str= "住宅";
pw.print(new String(str.getBytes(),"gbk"));
pw.close();
}

如果是其他汉字,是正常中文,这是怎么回事,如何解决?

------解决方案--------------------
public static void main(String[] args) throws FileNotFoundException, UnsupportedEncodingException {
FileOutputStream fos = new FileOutputStream("d:\\1.txt");
PrintWriter pw = new PrintWriter(fos);
String str= "住宅";
pw.print(new String(str.getBytes("utf-8"),"gbk"));
pw.close();
}
------解决方案--------------------
猜测楼主是用的windows自带的记事本打开的吧!
这个不是java程序的问题,即使你手动写个“住宅”进去,用它打开照样是乱码。
因为这个软件打开的时候解码解错了,如果你点击文件菜单中的另存为选项,你会发现弹出来的对话框下面的编码变为了UTF-8,也就是说,你用GBK编码存的东西,它却用UTF-8去解码了,所以就错了呗!
其实还有其他的字:例如“联通”两个字。
那么为什么其他汉字就没问题呢?因为这些字的编码符合UTF-8编码格式,所以这个记事本软件就先去用UTF-8编码去解码了,其实换一个高级的文本编辑器用GBK编码打开就好了。
------解决方案--------------------
import java.io.*;
import java.util.*;
public class Test5
{
public static void main(String[] args) throws FileNotFoundException, UnsupportedEncodingException {
FileOutputStream fos = new FileOutputStream("c:\\1.txt");
PrintWriter pw = new PrintWriter(fos);
String str= "\u6B22\u8FCE ";
pw.write(str);
pw.print(new String(str.getBytes(),"gbk"));
pw.close();
}
}


执行这个代码,就可以实现输出汉字,一个十六位的比特位统一码字符,用以\u开头的4位十六进制的数表示。范围是'\u0000'到'uFFF'