Java 正在使用流创建xml,缺少编码属性

Java 正在使用流创建xml,缺少编码属性,java,xml,Java,Xml,我使用如下代码创建xml: public static void main(String[] args) { XMLOutputFactory factory = XMLOutputFactory.newInstance(); XMLEventFactory eventFactory = XMLEventFactory.newInstance(); try { XMLEventWriter writer

我使用如下代码创建xml:

    public static void main(String[] args) {
        XMLOutputFactory factory      = XMLOutputFactory.newInstance();
        XMLEventFactory  eventFactory = XMLEventFactory.newInstance();
        try {
            XMLEventWriter writer =
                    factory.createXMLEventWriter(System.out);

            XMLEvent event = eventFactory.createStartDocument("utf-8");
            writer.add(event);

            event = eventFactory.createStartElement(
                    "", "", "test");
            writer.add(event);
            event = eventFactory.createEndElement(
                    "", "", "test");
            writer.add(event);
            writer.flush();
            writer.close();
        } catch (XMLStreamException e) {
            e.printStackTrace();
        }
    }

但在标题中缺少属性编码。怎么了?

只有“utf-8”缺少编码。如果指定不同的编码,则该编码将包含在XML声明中。UTF-8是XML的默认编码,因此这不是一个真正的错误

但是,如果您不使用
System.out
,即使是“UTF-8”也会包含编码。例如,使用
StringWriter

public static void main(String[] args) {
  XMLOutputFactory factory      = XMLOutputFactory.newInstance();
  XMLEventFactory  eventFactory = XMLEventFactory.newInstance();
  try {

    StringWriter sw = new StringWriter();

    XMLEventWriter writer =
        factory.createXMLEventWriter(sw);

    XMLEvent event = eventFactory.createStartDocument("utf-8");
    writer.add(event);

    event = eventFactory.createStartElement(
        "", "", "test");
    writer.add(event);
    event = eventFactory.createEndElement(
        "", "", "test");
    writer.add(event);
    writer.flush();
    writer.close();

    sw.close();
    System.out.println(sw.toString());

  } catch (XMLStreamException e) {
    e.printStackTrace();
  } catch (IOException e) {
    e.printStackTrace();
  }
}

然后结果是:

仅“utf-8”缺少编码。如果指定不同的编码,则该编码将包含在XML声明中。UTF-8是XML的默认编码,因此这不是一个真正的错误

但是,如果您不使用
System.out
,即使是“UTF-8”也会包含编码。例如,使用
StringWriter

public static void main(String[] args) {
  XMLOutputFactory factory      = XMLOutputFactory.newInstance();
  XMLEventFactory  eventFactory = XMLEventFactory.newInstance();
  try {

    StringWriter sw = new StringWriter();

    XMLEventWriter writer =
        factory.createXMLEventWriter(sw);

    XMLEvent event = eventFactory.createStartDocument("utf-8");
    writer.add(event);

    event = eventFactory.createStartElement(
        "", "", "test");
    writer.add(event);
    event = eventFactory.createEndElement(
        "", "", "test");
    writer.add(event);
    writer.flush();
    writer.close();

    sw.close();
    System.out.println(sw.toString());

  } catch (XMLStreamException e) {
    e.printStackTrace();
  } catch (IOException e) {
    e.printStackTrace();
  }
}
然后结果是: