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

时间:2013-01-10 07:10:33

标签: java xslt xslt-1.0

我的输入具有类似Í,Â,ÇÁ的重音字符,使用xslt版本1.0我需要渲染这些字符而不做任何更改。

例如: input Í ÇÂME HOME output Í ÇÂ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");
    }

2 个答案:

答案 0 :(得分:2)

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

out.toString("UTF-8") 

???)

第一步是弄清楚你的数据是什么编码以及你应该生成什么编码。例如,如果您使用Notepad++,它会有一个菜单“编码”,它会显示文件的当前编码,并允许您更改它,查看效果。告诉我们这是什么故事。

你可能会追随西欧的窗户生态:windows-1252

同时检查:the encoding attribute of the XSL output element

如果你愿意,我可以用C#给你一些样本,但是你运行Java ...

答案 1 :(得分:0)

感谢您添加代码。在您的Java代码中,您是否可以尝试更改"UTF-8"所在的两个位置而不是"UTF8"(没有连字符)?我想我以前见过这个问题。