我们如何在没有任何编码的情况下渲染重音字符



我的输入有重音字符,如Í,Â,Ç Á,使用xslt 1.0版本,我需要不做任何更改地呈现这些字符。

例如:input Í ÇÂME HOMEoutput Í ÇÂME HOME我不想编码/改变这些重音字符,但我得到的输出是Ã? ÇÂME HOME

我观察到的是:Í is converting to Ã?Ç to Ç to Â

如果您观察到所有这些字符都转换为大写a,则使用附加字符(, ? ‡ )

有谁能帮帮我吗我的样式表看起来像这样:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="2.0">
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes" />
    <xsl:template match="/">
        <xsl:element name="root">
                      <xsl:value-of select="/../inputpath/msg"/>
                <xsl:element>
</xsl:stylesheet>

转换xml的代码

public static String transformByXslt(final String input, final String styleSheet,
            final Map<String, String> parameterMap, final ProductMetadata productMetadata,
            final ProductInstance productInstance, final Map<String, Object> daoMap) throws TransformerException,
            UnsupportedEncodingException, ValidationException, NoNeedToRenderException {
        final ByteArrayOutputStream out = new ByteArrayOutputStream();
        final TransformerFactory factory = TransformerFactory.newInstance();
        InputStream inputStream = null;
        inputStream = new ByteArrayInputStream(input.getBytes("UTF-8"));
        Transformer transformer = factory.newTransformer(new StreamSource(new ByteArrayInputStream(styleSheet
                .getBytes())));
        setParamsForXslt(transformer, parameterMap, productMetadata, productInstance, daoMap);
        transformer.setErrorListener(new PbErrorListener());
        try {
            transformer.transform(new StreamSource(inputStream), new StreamResult(out));
        } catch (TransformerException e) {
            if (ExceptionUtils.getRootCause(e) != null
                    && ExceptionUtils.getRootCause(e).getClass().equals(ValidationException.class)) {
                throw new ValidationException(e);
            } else if (ExceptionUtils.getRootCause(e) != null
                    && ExceptionUtils.getRootCause(e).getClass().equals(NoNeedToRenderException.class)) {
                throw new NoNeedToRenderException(e);
            } else if (ExceptionUtils.getRootCause(e) != null
                    && ExceptionUtils.getRootCause(e).getClass().equals(BlankRenditionException.class)) {
                return "";
            } else {
                throw e;
            }
        }
        return out.toString("UTF-8");
    }

Rupesh,您将UTF-8编码数据视为单字节编码数据或将UTF-8编码两次。(

out.toString("UTF-8") 

? ?)

第一步是弄清楚,你的数据是什么编码,你应该产生什么编码。例如,如果你使用notepad++,它有一个"编码"菜单,它会显示文件的当前编码,并允许你更改它,看看效果。告诉我们是怎么回事。

您可能在西欧的windows编码之后:windows-1252

也检查一下:XSL输出元素

的encoding属性

如果你喜欢,我可以给你一些c#的例子,但是你运行的是Java…

感谢您添加代码。在你的Java代码,你可以尝试改变两个地方,你有"UTF-8"代替"UTF8"(没有连字符)?我想我以前见过这个问题。

相关内容

  • 没有找到相关文章

最新更新