XML XSLT转换
问题描述:
期间如何处理(R)符号我有一个UTF-8 XML(作为字符串传递),其包含以下行:XML XSLT转换
<LongName>SomeName®</LongName>
。
它应该在XSLT转换后转换为另一个UTF-8 XML。问题是唯一有®符号,它转化为两个符号:®
下面的代码:
public String transform (String inputXML) throws TransformerException {
TransformerFactory factory = TransformerFactory.newInstance();
OutputStream os = new ByteArrayOutputStream();
InputStream transformationFile = getClass().getResourceAsStream(TRANSFORMER_PATH);
Transformer transformer = factory.newTransformer(new StreamSource(transformationFile));
InputStream is = new ByteArrayInputStream(inputXML.getBytes(Charset.forName("UTF-8")));
Source input = new StreamSource(is);
transformer.transform(input, new StreamResult(os));
return os.toString();
}
所以,问题是 - 如何正确变换®到®从UTF-8 UTF- 8 XML?取而代之的
InputStream is = new ByteArrayInputStream(inputXML.getBytes(Charset.forName("UTF-8")));
Source input = new StreamSource(is);
答
你的错误是最后一行:
return os.toString();
由于os
是一个ByteArrayOutputStream
它的字节数组转换为String
它将使用当前平台的默认编码UTF-8
。您可以使用return os.toString("UTF-8");
。
+0
谢谢,解决了问题 – XpressOneUp
它看起来像你没有阅读源为UTF8。 – SLaks
我该怎么办才能修复它? – XpressOneUp
您正在读取inputXML中存储的码点序列的UTF-8编码的字节。不要这样做:从字符串中创建一个流,并在转换处抛出它。 – laune