Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/376.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_Transformation - Fatal编程技术网

Java Xml转换编码问题

Java Xml转换编码问题,java,xml,transformation,Java,Xml,Transformation,嗨,我有一个简单的代码: InputSource is = new InputSource(new StringReader(xml)) Document d = documentBuilder.parse(is) StringWriter result = new StringWriter() DOMSource ds = new DOMSource(d) Transformer t = TransformerFactory.newInstance().

嗨,我有一个简单的代码:

    InputSource is = new InputSource(new StringReader(xml))
    Document d = documentBuilder.parse(is)
    StringWriter result = new StringWriter()
    DOMSource ds = new DOMSource(d)
    Transformer t = TransformerFactory.newInstance().newTransformer()
    t.setOutputProperty(OutputKeys.INDENT, "yes");
    t.setOutputProperty(OutputKeys.OMIT_XML_DECLARATION, "no");
    t.setOutputProperty(OutputKeys.STANDALONE, "yes");
    t.setOutputProperty(OutputKeys.ENCODING,"UTF-16")
    t.transform(ds,new StreamResult(result))
    return result.toString()
这应该将xml转换为UTF-16编码。尽管据我所知,jvm中字符串的内部表示已经使用UTF-16字符,但我的期望是结果字符串应该包含一个头,其中编码设置为“UTF-16”,原始xml是UTF-8,但我得到:

 <?xml version="1.0" encoding="UTF-8" standalone="no"?>

(另外,独立属性似乎是错误的) transformer实例是:com.sun.org.apache.xalan.internal.xsltc.trax.TransformerImpl (我认为是违约)
那么我在这里错过了什么呢?

使用一个writer,其中明确声明UTF-16为输出编码。试试
OutputStreamWriter(OutputStream out,String charsetName)
,它应该用tearrayoutputstream包装一个
,看看这是否有效。

我现在自己写了一个测试。有一个小改动:

 t.transform(ds,new StreamResult(new File("dest.xml")));

我得到了相同的结果,但是文件确实是UTF-16编码的,用十六进制编辑器检查。出于某种奇怪的原因,xml声明没有更改。因此,您的代码可以正常工作。

为什么要更改xml中的编码属性?我想要的是使用转换器来更改xml头中的编码。(不起作用),因为转换器可能知道显式编码?是的,我的问题是关于这个“奇怪的原因”,我的问题不是编码没有更改(它对我也起作用),而是xml声明没有更改。。。就像你写的,这有点像皮塔。我会向Xalan询问并写信给他们的邮件列表。你到底能解决这个问题吗?我现在在一个应用程序中也遇到了这个问题。真糟糕。我已经查过来源了。
编码
值仅适用于translet。