Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/357.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/13.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 如何应用utf-8字符集编码将DOM文档对象转换为xml_Java_Xml_Encoding_Utf 8 - Fatal编程技术网

Java 如何应用utf-8字符集编码将DOM文档对象转换为xml

Java 如何应用utf-8字符集编码将DOM文档对象转换为xml,java,xml,encoding,utf-8,Java,Xml,Encoding,Utf 8,我需要将DOM文档对象转换为xml,并确保xml的内容是utf-8字符集。 我的代码如下所示,但没有达到预期的结果,在生成的xml中,我可以看到字符没有被编码 Document doc = (Document)operation.getResult(); //this method is returning the document object TransformerFactory tFactory = TransformerFactory.newInstance(); Transfo

我需要将DOM文档对象转换为xml,并确保xml的内容是utf-8字符集。 我的代码如下所示,但没有达到预期的结果,在生成的xml中,我可以看到字符没有被编码

Document doc = (Document)operation.getResult(); //this method is returning the document object
TransformerFactory tFactory = TransformerFactory.newInstance();    
Transformer transformer = tFactory.newTransformer();        
transformer.setOutputProperty(OutputKeys.ENCODING, "UTF-8");
transformer.setOutputProperty(OutputKeys.INDENT, "yes");
transformer.setOutputProperty(OutputKeys.OMIT_XML_DECLARATION, "no"); 
transformer.setOutputProperty(OutputKeys.METHOD, "xml"); 
DOMSource domSource = new DOMSource(doc);
OutputStreamWriter osw = new OutputStreamWriter(outputStream, "UTF-8");
StreamResult result = new StreamResult(osw);
transformer.transform(domSource,result);
从上述代码中获得的outputStream被提供给ADF中的文件下载组件,在这里可以看到生成的xml文件没有针对特定字符进行编码,而头行表示正在生成编码。 生成的xml文件示例如下所示

<?xml version = '1.0' encoding = 'UTF-8'?>
<PlanObjects>
      <CompPlan BusinessUnit="Vision Operations" OrgId="204" Name="RNNewCompPlan" StartDate="2015-01-01" EndDate="2015-12-31">
         <CompPlansVORow>
            <CompPlanName>RNNewCompPlan</CompPlanName>
            <Description>Using some special chars in desc - ¥ © ¢ </Description>
            <DisplayName>RNNewCompPlan</DisplayName>
         </CompPlansVORow>
   </CompPlan>
</PlanObjects>

RNPPLAN
在描述中使用一些特殊字符
RNPPLAN
希望字符“¥–■”已编码并显示为十六进制/八进制代码。
有人能告诉我这里出了什么问题吗?

您对UTF-8的理解是不正确的-
¥×
与文件的其余部分一起被编码为UTF-8。您可以通过在十六进制编辑器中打开文件并找到序列来验证这一点:
'c2a5 c2a9 c2a2'
,这将是
¥¨¨的UTF-8编码

顺便说一句,您不应该在XML中使用十六进制/八进制字符转义序列。XML解析器将毫无疑问地对文件进行解码

要测试代码是否与其他解析器一起工作,请使用以下python代码:

import xml.etree.ElementTree as ET

tree = ET.parse('test.xml')
root = tree.getroot()

print ET.tostring(root, encoding="UTF-8")

您对UTF-8的理解不正确-<代码>和文件的其余部分被编码为UTF-8。您可以通过在十六进制编辑器中打开文件并找到序列来验证这一点:
'c2a5 c2a9 c2a2'
,这将是
¥¨¨的UTF-8编码

顺便说一句,您不应该在XML中使用十六进制/八进制字符转义序列。XML解析器将毫无疑问地对文件进行解码

要测试代码是否与其他解析器一起工作,请使用以下python代码:

import xml.etree.ElementTree as ET

tree = ET.parse('test.xml')
root = tree.getroot()

print ET.tostring(root, encoding="UTF-8")

您的代码正常,并生成一个用UTF-8编码的XML文档。生成的xml文件没有为标题行中的特殊字符编码是什么意思?这是什么语言?请澄清:“我的代码如下所示,但没有达到预期的结果,在生成的xml中,我可以看到字符没有编码。”@AlastairMcCormack:这是Java。@用户2082317:尝试摆脱
OutputStreamWriter
并直接使用
outputStream
构建
StreamResult
。您已经告诉
转换器
输出UTF-8,所以让它直接将UTF-8字节写入
输出流
。在这种情况下,
OutputStreamWriter
不会给您带来任何好处,甚至文档也建议使用流而不是
Writer
。您的代码正常,并生成以UTF-8编码的XML文档。生成的xml文件没有为标题行中的特殊字符编码是什么意思?这是什么语言?请澄清:“我的代码如下所示,但没有达到预期的结果,在生成的xml中,我可以看到字符没有编码。”@AlastairMcCormack:这是Java。@用户2082317:尝试摆脱
OutputStreamWriter
并直接使用
outputStream
构建
StreamResult
。您已经告诉
转换器
输出UTF-8,所以让它直接将UTF-8字节写入
输出流
。在这种情况下,
OutputStreamWriter
不会给您带来任何好处,甚至文档也建议使用流而不是
Writer
。感谢您的回复。。通过在十六进制编辑器中打开文件验证序列“c2a5 c2a9 c2a2”是否存在。那么这是否意味着UTF-8的编码与编写的代码是正确的呢。那么在这种情况下,你能解释一下测试这段代码的最佳方法是什么吗。有什么特别的角色?另外,如果XML解析器能够毫无问题地解析这个文件,那么它将证明编码是正确的,对吗?还有其他确认方法吗?好的,那么你的文件肯定是UTF-8。您应该能够在文本编辑器中打开它,设置为UTF-8编码。除了非ASCII字符外,这些字符没有什么特别之处。您可以使用任何旧的XML解析器阅读它,它将进行解析。我已经在我的答案中添加了一些测试代码,以便您验证Java之外的解析器谢谢您的回复。。通过在十六进制编辑器中打开文件验证序列“c2a5 c2a9 c2a2”是否存在。那么这是否意味着UTF-8的编码与编写的代码是正确的呢。那么在这种情况下,你能解释一下测试这段代码的最佳方法是什么吗。有什么特别的角色?另外,如果XML解析器能够毫无问题地解析这个文件,那么它将证明编码是正确的,对吗?还有其他确认方法吗?好的,那么你的文件肯定是UTF-8。您应该能够在文本编辑器中打开它,设置为UTF-8编码。除了非ASCII字符外,这些字符没有什么特别之处。您可以使用任何旧的XML解析器阅读它,它将进行解析