我的输入有重音字符,如Í,Â,Ç Á,使用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");
}
Rupesh,您将UTF-8编码数据视为单字节编码数据或将UTF-8编码两次。(
out.toString("UTF-8")
? ?)
第一步是弄清楚,你的数据是什么编码,你应该产生什么编码。例如,如果你使用notepad++,它有一个"编码"菜单,它会显示文件的当前编码,并允许你更改它,看看效果。告诉我们是怎么回事。
您可能在西欧的windows编码之后:windows-1252
也检查一下:XSL输出元素
的encoding属性如果你喜欢,我可以给你一些c#的例子,但是你运行的是Java…
感谢您添加代码。在你的Java代码,你可以尝试改变两个地方,你有"UTF-8"
代替"UTF8"
(没有连字符)?我想我以前见过这个问题。