Java 如何在没有任何编码的情况下呈现重音字符
我的输入有重音字符,如Í、Í、Á,使用xslt 1.0版,我需要在不做任何更改的情况下呈现这些字符 例如: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
输入我的主页
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 classjavax.XML.transform.Transformer
,您可以向我们展示用于转换XML的代码吗?我已经更新了问题。。请检查上面给出的代码,不完全确定它发生的确切原因,但您看到的输出是读取UTF8编码文本的结果,就像它是西欧(Windows)或记事本所称的“ANSI”。我猜您的问题实际上是在读取输出时,而不是使用此代码。这样对我有帮助
:使用记事本++打开输入文件,确保字符看起来正确,然后转到“编码”菜单,然后选择转换为不带BOM的UTF-8
。非常感谢RobertŠevčk-Robajzthanks JLRIS问题在于输入,而不是java代码<代码>修复
:用记事本++打开输入文件,确保字符看起来正确,然后进入编码菜单,选择转换为不带BOM的UTF-8
out.toString("UTF-8")