【问题标题】:Error in parsing XML file with encoding UTF-8 and UTF-16解析编码为 UTF-8 和 UTF-16 的 XML 文件时出错
【发布时间】:2013-08-04 13:58:26
【问题描述】:

我正在使用下面的方法来解析一个 XML 文件 -

package com.kcs.xml;

import java.io.File;
import java.io.FileInputStream;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.Reader;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import org.w3c.dom.Document;
import org.xml.sax.InputSource;

public class ParseXMLOld {
    public static void main(String[] args) 
    {
        final String FILE_PATH="C:\\abc.xml";
        File file=new File(FILE_PATH);
        ParseXMLOld pxo=new ParseXMLOld();
        pxo.parseUTFXML(file);
    }

    public Document parseUTFXML(File file) 
    {
        DocumentBuilderFactory docBuilderFactory = DocumentBuilderFactory.newInstance();
        DocumentBuilder docBuilder=null;
        Document doc=null;
        try {
            docBuilder = docBuilderFactory.newDocumentBuilder();
            InputStream inputStream= new FileInputStream(file);
            Reader reader = new InputStreamReader(inputStream,"UTF-16");
            InputSource is = new InputSource(reader);
            is.setEncoding("UTF-16");
            doc = docBuilder.parse(is);
            System.out.println("Done");
            } 
        catch(Exception e)
            {
            e.printStackTrace();
            }
        finally
            {
            docBuilderFactory=null;
            docBuilder=null;
            }
    return doc;
    }
}

我有两个编码为 UTF-8 和 UTF-16 的文件。如果上述代码中“UTF_ENCODING”的值为 UTF-8,则使用“UTF-8”编码的文件可以正常工作。但是我的代码无法解析其他编码为“UTF-16”的文件,反之亦然。

我想提一个更有趣的事情,如果我手动创建一个使用 UTF-16 编码的示例 XML 文件,IE7 将无法打开它。但是我试图解析的带有 UTF-16 编码的文件(我是从另一个系统获取的)正在 IE7 中打开。但是,如果您编辑此文件的第一行(将编码更改为 UTF-8,然后再次将其更改为 UTF-16),它不会打开。我不知道为什么会这样。

请帮忙。

我不知道如何共享这些文件。如果需要,请告诉我如何共享这两个文件?

例如,如何解析下面的文件?

<?xml version="1.0" encoding="UTF-16"?>
  <Details>
    <Content>
      <id>1234¥£€$¢</id>
      <Valid_From_Date>2013-01-01</Valid_From_Date>
      <Valid_To_Date>9999-12-31</Valid_To_Date>
      <Company>1210</Company>
      <Description>2nd Life Transaction</Description>
    </Content>
    <Totals>
      <Count>1</Count>
    </Totals>
</Details>

我遇到了错误 -

[致命错误]:1:1:序言中不允许内容。 org.xml.sax.SAXParseException;行号:1;列号:1;序言中不能有内容。 在 com.sun.org.apache.xerces.internal.parsers.DOMParser.parse(DOMParser.java:251) 在 com.sun.org.apache.xerces.internal.jaxp.DocumentBuilderImpl.parse(DocumentBuilderImpl.java:300) 在 com.kcs.xml.ParseXMLOld.parseUTF8XML(ParseXMLOld.java:34) 在 com.kcs.xml.ParseXMLOld.main(ParseXMLOld.java:19)

【问题讨论】:

    标签: java xml character-encoding xml-parsing


    【解决方案1】:

    如果文件具有 BOM 或序言中指定的编码,我的以下作品:

     File fXmlFile = … ;
     DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();
     DocumentBuilder dBuilder = dbFactory.newDocumentBuilder();
     Document doc = dBuilder.parse(new FileInputStream(fXmlFile))
    

    【讨论】:

    猜你喜欢
    • 2012-11-07
    • 1970-01-01
    • 2019-02-11
    • 2013-07-14
    • 2013-10-17
    • 1970-01-01
    • 2011-03-16
    • 1970-01-01
    • 2012-06-30
    相关资源
    最近更新 更多