2014-02-05 190 views
0

期间如何处理(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); 

+0

它看起来像你没有阅读源为UTF8。 – SLaks

+0

我该怎么办才能修复它? – XpressOneUp

+1

您正在读取inputXML中存储的码点序列的UTF-8编码的字节。不要这样做:从字符串中创建一个流,并在转换处抛出它。 – laune

回答

1

你的错误是最后一行:

return os.toString(); 

由于os是一个ByteArrayOutputStream它的字节数组转换为String它将使用当前平台的默认编码UTF-8。您可以使用return os.toString("UTF-8");

+0

谢谢,解决了问题 – XpressOneUp

0

尝试

Source input = new StreamSource(StringReader(inputXML)); 
+0

不幸同一问题 – XpressOneUp