dom4j写文件的编码问题(主要指中文)的解决
来源:互联网 发布:数据库远程连接错误26 编辑:程序博客网 时间:2024/06/05 09:05
网上有很多介绍dom4j的使用的文章,包括官方自己的举例。但是在写或者修改xml文件时,如果直接按教程方法写,就会遭遇编码问题,往往会报遇到不可识别的符号的错误。而在windows系统下,用记事本打开可能看起来很正常似的,比如看到xml编码标签那写的<?xml version="1.0" encoding="UTF-8"?>这样的格式。细心的人用EditPlus打开,就会发现编码实际上并非utf-8,可能是gbk。
我们来看写文件时用到的XMLWriter,他提供以下几种构造方法:
解决途径一:使用new XMLWriter(new FileOutputStream(...))方法。这样做,因为dom4j默认使用utf-8编码,即xml文件头默认编码方式,并且内容也会使用utf-8保存,这样可以做到一致的编码,不会出问题。
解决途径二:使用new XMLWriter(new FileOutputStream(...), outputFormat)的构造方法。
OutputFormat xmlFormat = OutputFormat.createPrettyPrint();
xmlFormat.setEncoding("utf-8");
XmLWriter writer = new XMLWriter(new FileOutputStream(...), xmlFormat);
writer.write(document);
writer.close();
如上,setEncoding可以设置存储的文件编码格式,createPrettyPrint是得到美化xml格式输出。这样的话,在不同的环境下可以获得同样的编码读写,并且真正保证了文件标称与实际编码的一致性。
【注意】如果你使用OutputFormat是为了设置文件编码,那千万别用 XMLWriter(new FileWriter(...), outputFormat)构造方法,因为前面已经说了,FileWriter不会处理编码,所以即使你使用format.setEncoding("utf-8");他仍然不会使用utf-8编码,而只是把文件头指定为utf-8,这类似不使用outputFormat的情况。而网上好多人举例用了XMLWriter writer = newXMLWriter(newFileWriter("output.xml"),format);那是因为他们format.setEncoding("gbk");而windows默认就是gbk,这当然使实际编码与标称的配套了。但实际上,这种方法是不正确的,java并没有按你写的"gbk"进行编码,而是使用了系统默认编码而已,放到linux就会出现错误,所以一定的小心。
把编码交给操作系统来控制一向是罪恶的,包括java其他地方的参数传递等,如request的参数传递,其他文件读写,如果不使用编码过滤器,不进行编码指定,可能使得整个系统失去移植性,并产生完全不可预期的错误。找起来头大不说,有时候看到encoding="UTF-8",实际上却是gkb编码会让你错过关键调试点。
还有就是记事本的罪恶性,用记事本打开不同编码的文件,往往得不到预期的效果,而且你无从得知他到底是用何种编码打开,一般使用EditPlus指定编码打开会好很多。
- dom4j写文件的编码(UTF-8)问题(主要指中文)的解决
- dom4j写文件的编码问题(主要指中文)的解决
- dom4j写文件时中文编码问题
- 【转】用Dom4j读写文件时的中文编码问题
- Dom4j 写文件编码问题
- Dom4j读写文件时的编码问题
- DOM4J中文编码解决
- 解决中文编码的问题
- DOM4J的中文问题
- Dom4j设置编码的问题
- Dom4j设置编码的问题
- 解决myeclipse引用单独的js外部文件时中文编码问题(解决的是js文件本身编码问题)
- DOM4J的中文乱码问题
- 解决STRUTS的中文编码问题
- [Erlang]解决R17中文编码的问题
- 解决python中文编码混乱的问题
- XML中文编码问题的解释解决
- 解决Itext中文编码问题的方案
- poj 1218 THE DRUNK JAILER
- 教你卸载oracle
- ARM 映象文件及执行机理
- dbscan算法
- Linux下文件和目录的颜色代表的含义
- dom4j写文件的编码问题(主要指中文)的解决
- Javascript 关于Cookie
- java反编译jad与jadeclipse
- html&xhtml笔记整理归类
- C语言的布尔类型
- Android 如何在自己的应用中模拟Home键
- AJAX 缓存问题的两种解决方法(IE)
- 问题:使用struts2,如何处理action的路径?还有,在action转到的jsp中,如何写js,css,图 片的路径
- Hibernate的Criteria 的用法进行总结: