Java 如何在没有任何编码的情况下呈现重音字符

Java 如何在没有任何编码的情况下呈现重音字符,java,xslt,xslt-1.0,Java,Xslt,Xslt 1.0,我的输入有重音字符,如Í、Í、Á,使用xslt 1.0版,我需要在不做任何更改的情况下呈现这些字符 例如: 输入我的主页 outputÍchi ME HOME 我不想编码/更改这些重音字符,但是 我得到的输出像Ã?“我的家” 我观察到的是: Í正在转换为Ã? toà 如果您观察到所有这些字符都转换为大写字母a,则使用附加字符平铺(,?) 谁能帮帮我吗 我的样式表如下所示: <?xml version="1.0" encoding="UTF-8"?> <xsl:styleshe

我的输入有重音字符,如Í、Í、Á,使用xslt 1.0版,我需要在不做任何更改的情况下呈现这些字符

例如:
输入我的主页
outputÍchi ME HOME
我不想编码/更改这些重音字符,但是 我得到的输出像
Ã?“我的家”

我观察到的是:
Í正在转换为Ã?

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");
    }
publicstaticstringtransformbyxslt(最终字符串输入、最终字符串样式表、,
最终映射参数映射,最终产品元数据ProductMetadata,
final ProductInstance ProductInstance,final Map daoMap)引发TransformerException,
UnsupportedEncodingException、ValidationException、NoNeedToRenderException{
final ByteArrayOutputStream out=新ByteArrayOutputStream();
最终TransformerFactory=TransformerFactory.newInstance();
InputStream InputStream=null;
inputStream=新的ByteArrayInputStream(input.getBytes(“UTF-8”);
变压器变压器=工厂。新变压器(新StreamSource(新ByteArrayInputStream)(样式表
.getBytes());
setParamsForXslt(转换器、parameterMap、productMetadata、productInstance、daoMap);
setErrorListener(新的PbErrorListener());
试一试{
transform(新StreamSource(inputStream)、新StreamResult(out));
}捕获(转换异常e){
if(ExceptionUtils.getRootCause(e)!=null
&&ExceptionUtils.getRootCause(e.getClass().equals(ValidationException.class))异常{
抛出新的ValidationException(e);
}else if(ExceptionUtils.getRootCause(e)!=null
&&ExceptionUtils.getRootCause(e.getClass().equals(NoNeedToRenderException.class)){
抛出新的NoNeedToRenderException(e);
}else if(ExceptionUtils.getRootCause(e)!=null
&&ExceptionUtils.getRootCause(e.getClass().equals(BlankRenditionException.class)){
返回“”;
}否则{
投掷e;
}
}
返回。toString(“UTF-8”);
}

感谢您添加代码。在Java代码中,您是否可以尝试将
“UTF-8”
的两个位置改为
“UTF8”
(无连字符)?我想我以前见过这个问题。

鲁佩什,您将UTF-8编码数据视为单字节编码数据或将UTF-8编码两次。(修订)

(?)

第一步是弄清楚,您的数据采用什么编码,您应该生成什么编码。例如,如果您使用,它有一个菜单“Encoding”,其中显示文件的当前编码,并允许您更改它,请参见效果。告诉我们是怎么回事

您可能正在寻找西欧windows编码:windows-1252

请检查以下内容:


如果您愿意,我可以给您一些C语言的示例,但是您运行Java…

听起来问题在您的样式表之外,要么是加载源XML时的编码问题,要么是输出结果XML时的编码问题。您使用什么过程来转换XML?感谢您的回答。我使用的是Xalan Java class
javax.XML.transform.Transformer
,您可以向我们展示用于转换XML的代码吗?我已经更新了问题。。请检查上面给出的代码,不完全确定它发生的确切原因,但您看到的输出是读取UTF8编码文本的结果,就像它是西欧(Windows)或记事本所称的“ANSI”。我猜您的问题实际上是在读取输出时,而不是使用此代码。
这样对我有帮助
:使用记事本++打开输入文件,确保字符看起来正确,然后转到“编码”菜单,然后选择
转换为不带BOM的UTF-8
。非常感谢RobertŠevčk-Robajzthanks JLRIS问题在于输入,而不是java代码<代码>修复
:用记事本++打开输入文件,确保字符看起来正确,然后进入编码菜单,选择
转换为不带BOM的UTF-8
out.toString("UTF-8")