【问题标题】:How to handle (R) symbol during XML XSLT transformation如何在 XML XSLT 转换期间处理 (R) 符号
【发布时间】:2014-03-02 06:25:28
【问题描述】:

我有一个 UTF-8 XML(作为字符串传递),其中包含以下行:

<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?

【问题讨论】:

  • 您似乎没有以 UTF8 格式读取源代码。
  • 我应该怎么做才能修复它?
  • 您正在读取存储在 inputXML 中的代码点序列的 UTF-8 编码字节。不要那样做:从字符串创建一个流并将其扔到转换中。
  • 如何创建流而不弄乱字节?例如,IOUtils.toInputStream(inputXML) 的做法完全相同。
  • 您的输入是一个字符串,因此您应该使用 StreamSource(Reader reader) 和来自该 inputXML 的 StringReader。

标签: java xml xslt utf-8 character-encoding


【解决方案1】:

你的错误是最后一行:

return os.toString();

由于osByteArrayOutputStream,它必须将字节数组转换为String,并且它将使用当前平台默认编码而不是UTF-8。您可以使用return os.toString("UTF-8");

【讨论】:

    【解决方案2】:

    代替

      InputStream is = new ByteArrayInputStream(inputXML.getBytes(Charset.forName("UTF-8")));
      Source input = new StreamSource(is);
    

    试试

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

    【讨论】:

    • 不幸的是同样的问题
    猜你喜欢
    • 1970-01-01
    • 2019-11-26
    • 1970-01-01
    • 2013-12-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-03
    • 1970-01-01
    相关资源
    最近更新 更多