我正在尝试编写一个可以再次读入我的程序的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);
最后一行返回错误。
答案 0 :(得分:2)
LSSerializer writeToString方法不允许Serializer选择编码。
使用LSOutput实例的setEncoding方法,LSSerializer的write方法可用于改变编码。 LSOutput CharacterStream可以设置为BufferedWriter的一个实例,这样从LSSerializer写入的调用将写入该文件。