比如转化一个 "中文网", 写入后,打开显示有乱码, 但是如果是 "中文网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"));为什么会这样呢, 怎么解决呢,谢谢。
解决方案 »
- java转换flv
- 有了解软通动力的没?
- 一个运行的顺序问题
- 怎样得到所需要的类型?
- AbsHandle handle = new ProductInfo();AbsHandle handle = ProductInfo.getInstance();这两句有什么区别吗?
- 在java application中怎么调用.chm文件?
- 【求Thinking in Java代码包】
- [求助]一个小问题
- 我翻译的部分《Java 编码规范》,感兴趣的可以看看,你们的鼓励使我继续的动力。
- 我在编译一个程序的时候出现了致命的错译大家帮我看看,谢谢了??
- java 如何使用使用较大的整数?
- 大家帮忙看看程序有什么问题!谢谢!
“中文网”以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("中文网");