我的输入具有类似Í,Â,ÇÁ的重音字符,使用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");
}
答案 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"
(没有连字符)?我想我以前见过这个问题。