使用Java以不同的字符编码编写XML

时间:2010-05-29 04:11:11

标签: java xml dom encoding

我正在尝试编写一个可以再次读入我的程序的XML库文件。

文件编写器代码如下:

XMLBuilder builder = new XMLBuilder();
Document doc = builder.build(bookList);
DOMImplementation impl = doc.getImplementation();
DOMImplementationLS implLS = (DOMImplementationLS) impl.getFeature("LS", "3.0");
LSSerializer ser = implLS.createLSSerializer();
String out = ser.writeToString(doc);

//System.out.println(out);

try{
    FileWriter fstream = new FileWriter(location);
    BufferedWriter outwrite = new BufferedWriter(fstream);
    outwrite.write(out);
    outwrite.close();
}catch (Exception e){
}

上面的代码确实写了一个xml文档。

但是,在XML标头中,它是一个以UTF-16编码文件的属性。

当我在文件中读到时,我收到错误:

“prolog中不允许的内容”

当编码属性手动更改为UTF-8时,不会发生此错误。

我正在尝试使用上面的代码编写以UTF-8编码的XML文档,或者成功解析UTF-16文件。

解析的代码是

DocumentBuilderFactory factory = 
DocumentBuilderFactory.newInstance();
DocumentBuilder loader = factory.newDocumentBuilder();
Document document = loader.parse(filename);

最后一行返回错误。

1 个答案:

答案 0 :(得分:2)

LSSerializer writeToString方法不允许Serializer选择编码。

使用LSOutput实例的setEncoding方法,LSSerializer的write方法可用于改变编码。 LSOutput CharacterStream可以设置为BufferedWriter的一个实例,这样从LSSerializer写入的调用将写入该文件。