比如转化一个 "中文网", 写入后,打开显示有乱码, 但是如果是 "中文网d",就 可以成功,无乱码。BufferedWriter w = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(new File(fileName))));
w.write(new String("中文网".getBytes("utf-8"),"GBK"));为什么会这样呢, 怎么解决呢,谢谢。
w.write(new String("中文网".getBytes("utf-8"),"GBK"));为什么会这样呢, 怎么解决呢,谢谢。
“中文网”以utf-8方式编码成字节数组,只能以utf-8方式再转化成字符串才不会乱码
为什么要这么干? w.write("中文网"); 不行么?如果你要指定编码,也应该在 new OutputStreamWriter 时指定啊
BufferedWriter w = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(new File(fileName)),"GBK"));
w.write(new String("中文网".getBytes("utf-8"),"GBK"));
getBytes("utf-8")是把保存在虚拟机中的中文编码成utf-8格式,而不是虚拟机中本身就是utf-8编码,new String(byte,"gbk")也不是让虚拟机内部编码为gbk,而是虚拟机以gbk方式解析传入编码,然后将编码转换成内部编码(utf-8编码变种),根据这个道理,你用utf-8格式获得虚拟机内部编码类型,然后再用GBK解析utf-8格式的编码,当然不能解析。
所以如果你要获得gbk的编码,必须要getBytes("GBK")才行,然后解析就用new String(byte,"gbk");
你这种写法是有问题的 只有new String("中文网".getBytes("GBK"),"GBK")这种方法才正确,但是这么写又是没有意义的。
不过有一个形式例外,就是new String(str.getBytes("ISO-8859-1"),"GBK"),为什么呢,因为这他们其实是同一种编码方式,只不过一个以英文编码方式解析,一个以中文方式解析而已。而utf-8与gbk根本就是两种编码方式,是不能互相解析的。
这句话做了什么?
w.write("中文网");