我使用以下方法来解析XML文件 -错误解析XML文件编码UTF-8和UTF-16
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; lineNumber:1; columnNumber:1;序言中不能有内容。 at com.sun.org.apache.xerces.internal.parsers.DOMParser.parse(DOMParser.java:251) at 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)如果文件我的
是的你是对的。但是,如果XML文件包含任何UTF-8字符(例如“¥£€$¢”),则这不起作用。感谢您的回复。 – Kartic
你有一个示例文件吗? –
是的,我有几个文件。我可以在这里分享吗?您可以在任何标签下输入上述字符并尝试解析它。 – Kartic