Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/308.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
用Java编写不同字符编码的XML_Java_Xml_Dom_Encoding - Fatal编程技术网

用Java编写不同字符编码的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")

我正在尝试编写一个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);

最后一行返回错误。

LSSerializer writeToString方法不允许序列化程序选择编码


使用LSOutput实例的setEncoding方法,可以使用LSSerializer的write方法更改编码。可以将LSOutput CharacterStream设置为BufferedWriter的实例,这样LSSerializer对write的调用将写入文件。

如果您告诉我们什么是XMLBuilder,可能会有所帮助。谷歌搜索
XMLBuilder
显示(我认为)7个不同的类。。。在搜索结果的第一页!哦,很抱歉,XMLBuilder是一个自行创建的类,它接受Book的SortedSet(文件和元数据的包装类)并返回一个构建的文档。那部分很好用。