`

读写xml乱码问题

XML 
阅读更多
写入xml文件的乱码问题
Technorati 标签: 写入xml文件的乱码问题

这几天开始学习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);

        }

    }
   至此DOM4J的问题编码问题算是告一段落,希望对此文章对其他朋友有用
分享到:
评论

相关推荐

    配置web-xml解决中文乱码问题.pdf

    配置 Web.xml 解决中文乱码问题 本文主要讨论了在 Web 开发中遇到的中文乱码问题,并提供了一些解决方案。首先,需要确定中文乱码问题不是由浏览器引起的,然后讨论了 Tomcat 服务器配置和数据库 bean 配置中的一些...

    Java读写xml,word,xml文件(防乱码)

    ### Java读写XML、Word与TXT文件:去除乱码问题详解 #### 一、引言 在实际开发过程中,我们经常需要处理各种类型的文件,包括XML、Word文档以及普通的文本文件(如TXT)。这些文件在读写过程中经常会遇到乱码问题,...

    解决读取XML元素时的中文乱码的程序

    XML(eXtensible Markup ...总的来说,解决XML文件中文乱码问题需要对字符编码有深入的理解,并且在处理XML时始终保持编码的一致性。通过合理地使用编程语言提供的API和遵循上述步骤,可以避免或解决大部分的乱码问题。

    dom4j 写UTF-8的xml乱码问题 使用FileOutputStream

    标题中的“dom4j 写UTF-8的xml乱码问题 使用FileOutputStream”涉及的是在使用Java编程语言处理XML文件时遇到的编码问题。DOM4J是一个强大的Java库,用于处理XML、XPath和XSLT,它提供了丰富的API来读取、写入、修改...

    java获取乱码问题

    本文将详细介绍如何通过修改`server.xml`配置文件来解决Java应用中出现的乱码问题,并对涉及到的相关知识点进行深入探讨。 #### 一、乱码问题背景 在Java Web开发中,客户端通过HTTP协议发送请求到服务器端,而...

    解决jbpm中gpd.xml的中文乱码

    以下是如何解决jbpm中gpd.xml中文乱码问题的详细步骤和相关知识点: 首先,我们需要理解的是字符编码的基础知识。在计算机中,文本是以二进制形式存储的,而字符编码如UTF-8、GBK等则规定了每个字符对应的二进制...

    乱码问题的解决

    "乱码问题的解决" 在 Web 开发中,乱码问题是常见的难题之一。乱码问题的出现主要是由于编码不一致引起的。编码不一致可能出现在多个方面,如页面编码、服务器编码、客户端编码、数据库编码等。在本文中,我们将...

    hadoop中文乱码问题

    【Hadoop中文乱码问题详解】 在大数据处理领域,Hadoop是一个不可或缺的开源框架,它提供了分布式存储(HDFS)和分布式计算(MapReduce)的能力。然而,在处理包含中文字符的数据时,用户可能会遇到中文乱码的问题...

    Weblogic乱码问题

    2. **Weblogic服务器配置不当:** Weblogic服务器内部对字符编码的处理也是乱码问题的关键因素之一。例如,服务器默认采用的字符编码可能与前端页面或后端数据库的字符编码不一致。 3. **HTTP请求处理不当:** 在...

    【Qt】 XML流读写XML.rar

    通过以上介绍,我们对Qt中的XML流式读写有了全面的理解。无论是使用QDomDocument进行结构化处理,还是借助QXmlStreamReader和QXmlStreamWriter实现高效读写,都可以根据实际需求选择合适的工具来处理XML数据。在实际...

    JAVA 乱码问题集合

    在Java编程中,乱码问题是一个常见的困扰,尤其是在处理字符编码时。以下是一些关键的知识点,可以帮助理解和解决Java中的乱码问题。 首先,我们需要理解字符编码的基本概念。字符编码是用来表示文本的一种方式,...

    jsp乱码解决超酷,通过web.xml配置

    "jsp乱码解决超酷,通过web.xml配置"这个标题表明,我们将通过配置`web.xml`文件来解决JSP页面中的乱码问题。下面将详细介绍这个过程以及相关的知识点。 首先,我们需要理解JSP乱码产生的原因。当用户通过表单提交...

    xml中文乱码问题

    总结来说,解决XML中文乱码问题的关键在于统一编码标准。无论是HTML文档、JavaScript代码还是XML文件本身,都需要确保它们使用的字符编码一致。在处理中文字符时,根据目标环境和需求选择合适的编码,如GB2312、GBK...

    jbpm的eclipse的流程设计器插件designer中的gpd.xml文件乱码问题

    总之,解决jbpm的Eclipse Designer插件中gpd.xml文件乱码问题的关键在于确认并保持文件和编辑器之间的一致性,确保使用的都是正确的字符编码。同时,了解Eclipse和相关插件的配置设置,以及如何正确处理XML文件,将...

    解决web项目中出现的乱码问题,很方便

    本方案提供了一个简洁有效的解决方法,通过一个Java文件和在`web.xml`配置文件中的简单设置,可以有效地解决乱码问题。 首先,我们要理解乱码产生的原因。在Web应用中,乱码通常发生在以下几个环节: 1. **请求...

    jsp中文乱码问题jsp中文乱码问题详解

    jsp中文乱码问题详解 在jsp中文乱码问题中,乱码的出现是由于编码格式不一致所导致的。在jsp文件中,存在三个地方的编码格式:jsp文件的存储格式、解码格式和控制浏览器的解码方式。如果这三个地方的编码格式不一致...

    springboot乱码问题解决方案

    SpringBoot乱码问题解决方案 SpringBoot框架是一款流行的Java Web开发框架,但是在...本文详细介绍了SpringBoot乱码问题解决方案,并提供了详细的示例代码和配置方法,希望对大家的学习和工作具有一定的参考学习价值。

    Ajax中文乱码问题解决方案

    然而,在处理中文字符时,Ajax请求可能会遇到乱码问题,这主要是由于编码格式不一致或者处理不当导致的。本文将深入探讨Ajax中文乱码问题的成因,并提供一系列解决方案。 **一、问题原因** 1. **编码格式不一致**...

    jboss eap 6.2或as 7 以上乱码问题解决

    乱码问题是由于系统或应用层面对字符编码处理不一致导致的。在jBoss环境下,这个问题通常发生在HTTP请求处理过程中,特别是在解析URL参数时。默认情况下,jBoss AS 和 EAP 使用的是ISO-8859-1编码来解析URL中的参数...

    解决post get 请求乱码问题

    解决 POST GET 请求乱码问题 在 Web 开发中,POST 和 GET 请求可能会出现乱码...解决 POST 和 GET 请求乱码问题需要对服务器和应用程序进行配置和编码处理。在实际开发中,我们需要根据具体情况选择合适的解决方法。

Global site tag (gtag.js) - Google Analytics