用Java编写不同字符编码的XML
我正在尝试编写一个XML库文件,可以再次读取到我的程序中 文件编写器代码如下所示:用Java编写不同字符编码的XML,java,xml,dom,encoding,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")
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);
最后一行返回错误。LSSerializer writeToString方法不允许序列化程序选择编码
使用LSOutput实例的setEncoding方法,可以使用LSSerializer的write方法更改编码。可以将LSOutput CharacterStream设置为BufferedWriter的实例,这样LSSerializer对write的调用将写入文件。如果您告诉我们什么是XMLBuilder,可能会有所帮助。谷歌搜索
XMLBuilder
显示(我认为)7个不同的类。。。在搜索结果的第一页!哦,很抱歉,XMLBuilder是一个自行创建的类,它接受Book的SortedSet(文件和元数据的包装类)并返回一个构建的文档。那部分很好用。