我使用StAX创建XML文件,然后用和XSD验证文件。
创建XML文件时出现错误:
javax.xml.stream.XMLStreamException: Underlying stream encoding 'Cp1252' and input paramter for writeStartDocument() method 'UTF-8' do not match.
at com.sun.xml.internal.stream.writers.XMLStreamWriterImpl.writeStartDocument(XMLStreamWriterImpl.java:1182)以下是代码片段:
XMLOutputFactory xof = XMLOutputFactory.newInstance();
try{
XMLStreamWriter xtw = xof.createXMLStreamWriter(new FileWriter(fileName));
xtw.writeStartDocument("UTF-8","1.0");} catch(XMLStreamException e) {
e.printStackTrace();
} catch(IOException ie) {
ie.printStackTrace();
}我在Unix上运行这段代码。有人知道如何设置版本和编码风格吗?
发布于 2010-05-31 22:11:40
我也会尝试使用带有输出参数的createXMLStreamWriter()。
编辑尝试,它的工作方式是更改createXMLStreamWriter行:
XMLStreamWriter xtw = xof.createXMLStreamWriter(new FileOutputStream(fileName), "UTF-8");编辑2做了一个更复杂的测试,为了记录:
String fileName = "Test.xml";
XMLOutputFactory xof = XMLOutputFactory.newInstance();
XMLStreamWriter xtw = null;
try
{
xtw = xof.createXMLStreamWriter(new FileOutputStream(fileName), "UTF-8");
xtw.writeStartDocument("UTF-8", "1.0");
xtw.writeStartElement("root");
xtw.writeComment("This is an attempt to create an XML file with StAX");
xtw.writeStartElement("foo");
xtw.writeAttribute("order", "1");
xtw.writeStartElement("meuh");
xtw.writeAttribute("active", "true");
xtw.writeCharacters("The cows are flying high this Spring");
xtw.writeEndElement();
xtw.writeEndElement();
xtw.writeStartElement("bar");
xtw.writeAttribute("order", "2");
xtw.writeStartElement("tcho");
xtw.writeAttribute("kola", "K");
xtw.writeCharacters("Content of tcho tag");
xtw.writeEndElement();
xtw.writeEndElement();
xtw.writeEndElement();
xtw.writeEndDocument();
}
catch (XMLStreamException e)
{
e.printStackTrace();
}
catch (IOException ie)
{
ie.printStackTrace();
}
finally
{
if (xtw != null)
{
try
{
xtw.close();
}
catch (XMLStreamException e)
{
e.printStackTrace();
}
}
}发布于 2010-06-02 03:46:17
这应该是可行的:
// ...
Writer writer = new OutputStreamWriter(new FileOutputStream(fileName), "UTF-8");
XMLStreamWriter xtw = xof.createXMLStreamWriter(writer);
xtw.writeStartDocument("UTF-8", "1.0");
// ...发布于 2011-01-14 03:10:31
从代码中很难确定,但如果您依赖于JDK1.6提供的默认Stax实现( sjsxp),我建议您升级到使用Woodstox。众所周知,它没有Sjsxp那么容易出错,支持整个Sun,并且已经得到了积极的开发和支持(而Stax2版本是刚刚编写的,修复的错误数量有限)。
但是代码中的bug是这样的:
XMLStreamWriter xtw = xof.createXMLStreamWriter(new FileWriter(fileName));您使用的是默认平台编码(必须是CP-1252,windows?)。您应该始终显式指定您正在使用的编码。Stream writer只是验证您是否正在做一些危险的事情,并发现可能导致文档损坏的不一致。相当聪明,这实际上表明这不是默认的Stax处理器。:-)
(其他答案也指出了一个正确的解决方法,只需传递OutputStream和编码,让XMLStreamWriter做正确的事情)
https://stackoverflow.com/questions/2943605
复制相似问题