java xml utf-8 乱码_使用UTF-8和UTF-16编码解析XML文件时出错

在尝试使用Java解析不同编码(UTF-8和UTF-16)的XML文件时遇到问题。当XML文件编码设置为UTF-8时,代码能正常工作,但改为UTF-16时,程序抛出错误。作者提到,一个手动创建的UTF-16 XML文件在IE7中无法打开,而从其他系统获取的UTF-16文件却可以在IE7中打开,但经过编码更改后无法打开。错误信息显示在XML文件的序言部分存在内容导致解析失败。
摘要由CSDN通过智能技术生成

我使用下面的方法来解析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),则无法打开 . 我不知道为什么会这样 .

请帮忙 .

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

For example, how can I parse below file?

1234¥£€$¢

2013-01-01

9999-12-31

1210

2nd Life Transaction

1

我收到以下错误 -

[致命错误]:1:1:prolog中不允许内容 . 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.main的com.kcs.xml.ParseXMLOld.parseUTF8XML(ParseXMLOld.java:34)中(ParseXMLOld.java:19)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值