- 浏览: 1328671 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (732)
- Java_about (146)
- Spring_Hibernate_Struts_OpenSource (27)
- linux_unix (62)
- life_sth (22)
- js_css_html_xml_nodejs (69)
- design_pattens (1)
- Perl (8)
- php_ecshop (4)
- DB_Mysql_Oracle_Informix_SqlServer (43)
- JSTL (8)
- Testing_自动化测试 (42)
- DB_ID_UUID (4)
- SEM_SEO (1)
- english_study_improvement (4)
- SVN_Git (9)
- WebService_SOA_CloudComputing (3)
- E-Commerce (1)
- Lucene_Solr (7)
- others (2)
- Regex (2)
- tomcat_jetty (8)
- zeroc-ice (1)
- java_excel (5)
- ant_maven_gradle (5)
- Unity_VR_AR_C# (2)
- jmeter (1)
- XPath_dom4j (1)
- Ruby_and_Rails (68)
- write_a_rails (17)
- manage_and_team (1)
- getting_real (1)
- ubuntu (20)
- git_and_git_flow (7)
- TODO (1)
- PM_design (2)
- Python_and_Django (8)
- NoSql_mongo_redis (24)
- C/C++ (3)
- vi_vim_gvim (0)
- c#_.Net_windows编程_dll (10)
- Php_and_Yii (9)
- Android_IOS (31)
- Mysql (5)
- sa_运维_network_硬件 (37)
- lua (2)
- c_cpp_VisualStudio (21)
- 硬件-RM-Arduino (6)
最新评论
-
shenkun58:
...
NoClassDefFoundError: Could not initialize springframework.BeanCreationException -
liaojia1:
正解,感谢
NoClassDefFoundError: Could not initialize springframework.BeanCreationException -
flingfox63:
谢谢分享,电脑上有IPV6,导致了Guard启动不了……
ruby错误解决: Address family not supported by protocol - connect(2) -
c39274936:
s = "hello_world_ruby" ...
驼峰格式和下划线格式转换_translation between camel and snake format -
yfj300:
学习了学习了学习了学习了
硬盘基本知识(磁道、扇区、柱面、磁头数、簇、MBR、DBR)
见了dom4j中文乱码问题,主要用在给xml文件添加注释addComment("中文");
用
// try {
// comment = new String(comment.getBytes("GBK"), "UTF-8");
// } catch (UnsupportedEncodingException e) {
// e.printStackTrace();
// }
不能解决问题。
搜索下,查了下问题所在,特记录之。
java 中由Writer类继承下来的子类没有提供编码格式处理,所以dom4j也就无法对输出的文件进行正确的格式处理。这时候所保存的文件会以系统的默认编码 对文件进行保存,在中文版的window下java的默认的编码为GBK,也就是所虽然我们标识了要将xml保存为utf-8格式但实际上文件是以GBK 格式来保存的,所以这也就是为什么能够我们使用GBK、GB2312编码来生成xml文件能正确的被解析,而以UTF-8格式生成的文件不能被xml解析 器所解析的原因。
解决方法:FileOutputStream,而不用java自带的FileWriter
org.dom4j.io.XMLWriter xmlWriter = new org.dom4j.io.XMLWriter(new FileOutputStream (fileName) );
另外摘录原文:http://www.360doc.com/content/090513/21/59141_3490363.html
<!-- Error -->
import java.io.File;
import java.io.FileOutputStream; import java.io.FileWriter; import java.io.PrintWriter; import java.util.HashMap; import org.jdom.Document; import org.jdom.Element; import org.jdom.output.Format; import org.jdom.output.XMLOutputter; public class BuildXML { public static void main(String[] args) throws Exception{ File xmlfile=new File("C:\\EditTemp\\xml\\abc.xml"); //中文问题 //GBK 是没有问题的,但UTF-8就是有问题的 //原因: //1)对于磁盘文件,必须使用输出流 FileOutputStream // FileWriter out=new FileWriter(xmlfile);会导致乱码 //2)对于控制台输出,则必须使用PrintWriter,如果直接使用System.out也会出现乱码 // PrintWriter out=new PrintWriter(System.out); FileOutputStream out=new FileOutputStream(xmlfile); Element eroot=new Element("root"); eroot.addContent((new Element("code")).addContent("代码")); eroot.addContent((new Element("ds")).addContent("数据源")); eroot.addContent((new Element("sql")).addContent("检索sql")); eroot.addContent((new Element("order")).addContent("排序")); Document doc=new Document(eroot); XMLOutputter outputter = new XMLOutputter(); //如果不设置format,仅仅是没有缩进,xml还是utf-8的,因此format不是必要的 Format f = Format.getPrettyFormat(); //f.setEncoding("UTF-8");//default=UTF-8 outputter.setFormat(f); outputter.output(doc, out); out.close(); } }
Dom4j 编码问题彻底解决
lonsen
发表于 2004-10-31 01:39:00
这几天开始学习dom4j,在网上找了篇文章就开干了,上手非常的快,但是发现了个问题就是无法以UTF-8保存xml文件,保存后再次读出的时候会报
“Invalid byte 2 of 2-byte UTF-8
sequence.”这样一个错误,检查发现由dom4j生成的这个文件,在使用可正确处理XML编码的任何的编辑器中中文成乱码,从记事本查看并不会出
现乱码会正确显示中文。让我很是头痛。试着使用GBK、gb2312编码来生成的xml文件却可以正常的被解析。因此怀疑的dom4j没有对utf-8编
码进行处理。便开始查看dom4j的原代码。终于发现的问题所在,是自己程序的问题。
在dom4j的范例和网上流行的《DOM4J 使用简介》这篇教程中新建一个xml文档的代码都类似如下 public void createXML(String fileName) { Document doc = org.dom4j.DocumentHelper.createDocument(); Element root = doc.addElement("book"); root.addAttribute("name", "我的图书"); Element childTmp; childTmp = root.addElement("price"); childTmp.setText("21.22"); Element writer = root.addElement("author"); writer.setText("李四"); writer.addAttribute("ID", "001"); try { org.dom4j.io.XMLWriter xmlWriter = new org.dom4j.io.XMLWriter( new FileWriter(fileName)); xmlWriter.write(doc); xmlWriter.close(); } catch (Exception e) { System.out.println(e); } } 在上面的代码中输出使用的是FileWriter对象进行文件的输出。这就是不能正确进行文件编码的原因所在,java中由Writer类继承下来的子类 没有提供编码格式处理,所以dom4j也就无法对输出的文件进行正确的格式处理。这时候所保存的文件会以系统的默认编码对文件进行保存,在中文版的 window下java的默认的编码为GBK,也就是所虽然我们标识了要将xml保存为utf-8格式但实际上文件是以GBK格式来保存的,所以这也就是 为什么能够我们使用GBK、GB2312编码来生成xml文件能正确的被解析,而以UTF-8格式生成的文件不能被xml解析器所解析的原因。 好了现在我们找到了原因所在了,我们来找解决办法吧。首先我们看看dom4j是如何实现编码处理的 public XMLWriter(OutputStream out) throws UnsupportedEncodingException { //System.out.println("In OutputStream"); this.format = DEFAULT_FORMAT; this.writer = createWriter(out, format.getEncoding()); this.autoFlush = true; namespaceStack.push(Namespace.NO_NAMESPACE); } public XMLWriter(OutputStream out, OutputFormat format) throws UnsupportedEncodingException { //System.out.println("In OutputStream,OutputFormat"); this.format = format; this.writer = createWriter(out, format.getEncoding()); this.autoFlush = true; namespaceStack.push(Namespace.NO_NAMESPACE); } /** * Get an OutputStreamWriter, use preferred encoding. */ protected Writer createWriter(OutputStream outStream, String encoding) throws UnsupportedEncodingException { return new BufferedWriter( new OutputStreamWriter( outStream, encoding ) ); } 由上面的代码我们可以看出dom4j对编码并没有进行什么很复杂的处理,完全通过java本身的功能来完成。所以我们在使用dom4j的来生成我们的 XML文件时不应该直接为在构建XMLWriter时,不应该直接为其赋一个Writer对象,而应该通过一个OutputStream的子类对象来构 建。也就是说在我们上面的代码中,不应该用FileWriter对象来构建xml文档,而应该使用FileOutputStream对象来构建所以将代码 修改入下: public void createXML(String fileName) { Document doc = org.dom4j.DocumentHelper.createDocument(); Element root = doc.addElement("book"); root.addAttribute("name", "我的图书"); Element childTmp; childTmp = root.addElement("price"); childTmp.setText("21.22"); Element writer = root.addElement("author"); writer.setText("李四"); writer.addAttribute("ID", "001"); try { //注意这里的修改 org.dom4j.io.XMLWriter xmlWriter = new org.dom4j.io.XMLWriter( new FileOutputStream(fileName)); xmlWriter.write(doc); xmlWriter.close(); } catch (Exception e) { System.out.println(e); } } |
发表评论
-
【Apache ZooKeeper】命令行zkCli.sh使用指南
2016-07-22 20:32 8706from:http://blog.sina.com. ... -
获取spring的ApplicationContext几种方式
2016-05-17 16:39 1344From:http://blog.sina.com.cn/ ... -
Velocity缓存与穿透
2016-03-17 16:47 743总评:只是标记一下这种用法hack方法。这种场景下用这 ... -
Spring的 classpath 通配符加载配置文件
2016-03-06 08:03 1264classpath:app-Beans.xml ... -
logback-log4j比较-优点-使用例子
2016-02-29 17:56 4128搞这个玩意儿,不是特别好啊。为啥不能有好过度,玩儿死程序猿 ... -
spring3_学习笔记和总结_学习记录
2011-04-05 23:58 1171spring3_学习笔记和总结_学习记录 最近又有机会用sp ... -
spring_自动启动程序_singleton
2011-03-22 14:55 2157spring使用中碰到几个需求: 1 要求singleton ... -
Hibernate_Tools插件的安装和使用
2010-12-18 10:56 1259一段时间没有用Hibernate的tools,又忘了。记录一下 ... -
Hibernate的Session的一点记录
2010-11-30 11:46 1234系统出现一个bug,还 ... -
开源的合理性和弊端(讨论开源软件)
2010-10-28 14:33 988这两天在Linux上安装软件,觉得很痛苦。应该是自己水平还有限 ... -
Hibernate_count_sum_统计函数的返回结果类型_与怎样兼容
2010-08-09 16:25 2403今天碰到一个Hibernate的问题,记录一下。 在本机测试 ... -
Hibernate_Error_a different object with the same identifier value in session
2010-08-05 15:03 1290Hibernate_Error: a different o ... -
Hibernate_tools_eclipseJaveEE_error:NoClassDefFoundError: SWTResourceUtil
2010-08-03 10:16 1601java.lang.NoClassDefFoundError: ... -
Hibernate_c3p0_报错_AbstractMethodError:OracleConnection.getHoldability()I
2010-07-15 12:17 2861Hibernate_c3p0_报错_AbstractMetho ... -
Hibernat_报错_Error: NoClassDefFoundError: javax/transaction/Synchronization
2010-07-15 11:26 1261Hibernat_报错_Error: NoClassDefFo ... -
Hibernate_c3p0_警告_WARN Both hibernate-style property 'hibernate.c3p0.max_size'
2010-07-15 11:04 2422Hibernate_c3p0_警告_WARN Bo ... -
Hibernate_报错_NoClassDefFoundError: Could not initialize class HibernateUtil
2010-07-15 10:40 3066Hibernate_报错_Error: NoClassDefF ... -
session.flash() in Hibernate
2010-06-04 15:10 1667Hibernate method flush flush() ... -
JUnit测试学习摘录
2009-12-22 11:05 1158最近有点儿时间,抓紧时间把一知半解的测试重新温习并提高些。 ... -
XMLBEANS 2.0 —— 一位JAVA开发人员的视点
2009-09-29 14:49 1876XMLBEANS 2.0 —— 一位JA ...
相关推荐
- 确保处理XML时正确处理编码,避免乱码问题。 - 在修改XML内容时,务必确保找到的节点是存在的,否则会抛出异常。 - `XMLWriter`的输出格式可以根据需求调整,比如去掉空格和换行,或者使用紧凑格式。 DOM4J的...
与DOM(文档对象模型)不同,JDOM不需要将XML文档解析成一个由节点构成的树结构,而是提供了更加直观的文档对象。这些对象包括但不限于Element(元素),Document(文档),Attribute(属性)等。JDOM的设计目的之一...
在早期版本的 JDOM 中,可能存在编译错误和中文乱码问题。例如,原文提到的作者在使用旧版 JDOM 时遇到这些问题,但“法老”对此进行了修正。在使用 JDOM 时,确保你的环境配置正确是至关重要的,比如需要将 JDOM 的...
4. **编码问题**:确保XML文件和Java程序的编码一致,避免乱码问题。 综上所述,JDOM是Java处理XML的强大工具,通过它可以轻松地读取、修改XML文档。掌握JDOM的使用,能够帮助开发者更高效地进行XML数据的处理和...
dom4j是一个Java的XML API,类似于jdom,用来读写XML文件的。dom4j是一个非常优秀的Java XML API,具有性能优异、功能强大和极端易用使用的特点,同时它也是一个开放源代码的软件,现在越来越多的Java软件都在使用...
在XML数据交换中,选择以XML字符串的形式进行传输有其便利之处,因为它占用空间小,且易于在网络上传输。...同时,注意处理XML中的编码问题,特别是当涉及到中文字符时,确保正确设置编码以避免乱码问题。
在使用JDOM解析XML时,可能会遇到字符编码问题,导致中文显示为乱码。解决方法是设置正确的编码方式,例如在生成或输出XML时指定编码为GBK或UTF-8。在给出的代码示例中,使用了`javax.xml.transform.Transformer`来...
`chm乱码终极解决方案.txt` 提供了解决CHM文件乱码问题的方法,这对于处理不同编码格式的CHM文档时可能会遇到的问题非常有帮助。 最后,`W3school离线测试版5.0版-20110318` 是W3School的离线版本,W3School是一个...
全书一共被压缩为5个rar,这是第四个!...21.2 中文乱码问题的解决方案 614 21.3 使用过滤器解决中文问题 616 21.4 让tomcat支持中文文件名 620 21.5 国际化与本地化 621 21.5.1 locale 621.. 21.5.2 资源包 623 ...
4. **JDOM解析XML中的中文问题**:JDOM解析XML时,中文字符可能出现乱码。解决方法是确保文件编码与解析时指定的编码一致,通常设置`InputStreamReader`的编码为UTF-8,并在XML文件头部声明编码。 5. **Java解析XML...
全书一共被压缩为5个rar,这是第二个!...21.2 中文乱码问题的解决方案 614 21.3 使用过滤器解决中文问题 616 21.4 让tomcat支持中文文件名 620 21.5 国际化与本地化 621 21.5.1 locale 621.. 21.5.2 资源包 623 ...
全书一共被压缩为5个rar,这是第五个!...21.2 中文乱码问题的解决方案 614 21.3 使用过滤器解决中文问题 616 21.4 让tomcat支持中文文件名 620 21.5 国际化与本地化 621 21.5.1 locale 621.. 21.5.2 资源包 623 ...
全书一共被压缩为5个rar,这是第三个!...21.2 中文乱码问题的解决方案 614 21.3 使用过滤器解决中文问题 616 21.4 让tomcat支持中文文件名 620 21.5 国际化与本地化 621 21.5.1 locale 621.. 21.5.2 资源包 623 ...
- **DOM4J**:DOM4J是一个开源的Java库,用于处理XML文档,支持DOM、SAX和JDOM等多种API。 - **使用示例**:DOM4J提供了丰富的API来读取、解析、修改和输出XML文档,例如通过Document对象获取根节点、遍历XML树等。
在使用JDOM解析XML时,若遇到中文乱码问题,需要确保文件编码与解析时指定的编码一致。以下代码示例展示了如何创建并保存包含中文的XML文件,同时指定编码为GBK: ```java import java.io.*; import javax.xml....
2. **解析XML文件**:使用XML解析器,如Python的`ElementTree`库,Java的`JDOM`或`DOM4J`,或者JavaScript的`DOMParser`,来读取和解析XML文件。解析器能够将XML文档转化为可操作的对象结构。 3. **构建CSV数据模型...
在进行SSH整合时,可能会遇到如JSP中Session访问、事务管理、中文乱码等问题,这些问题需要通过合理的配置和编码实践来解决。 以上是Spring2.5学习笔记中的核心知识点概述,每个主题都值得深入研究和实践,以掌握...
常见问题 读取Properties文件出现中文乱码 182 第9章 Java异常处理与反射机制 183 实例73 运用throws、throw、try与catch 183 实例74 throws声明异常的实例 185 实例75 自定义异常类 187 实例76 使用finally...
- **中文乱码问题**:配置字符编码以解决中文显示问题。 #### DTO、VO - **DTO(Data Transfer Object)**:用于在不同层之间传输数据的对象。 - **VO(Value Object)**:代表业务逻辑中的值对象,通常用于封装...