我正在使用xslt 1.0来转换通过.aspx页面上的Server.Execute返回的一些xml。在Google Chrome中,如果我使用以下XSLT编码:
<xsl:output method="html" version="4.0" omit-xml-declaration="yes" encoding="utf-8" indent="yes" />
我在转换后的XML顶部留下了一个空格。 如果我使用这种编码:
<xsl:output method="html" version="4.0" omit-xml-declaration="yes" encoding="iso-8859-1" indent="yes" />
空间已经消失,但像£这样的东西显示为 。从来没有真正理解我应该使用哪种编码。有人能指出我正确的方向吗?感谢。
答案 0 :(得分:1)
我认为问题是当你使用utf-8编码时,输出文件以指示编码的前缀开头 - 两个字符0xEF
和0xBB
的序列,这个前缀是你看到的额外空间。
您可以检查是否存在保存文件并检查前缀是否存在的情况 - 并查看问题是否消失,手动删除前缀。
当使用iso-8859-1(或其他非Unicode编码)时没有前缀,因此没有问题,但使用非Unicode编码通常是一个坏主意,因为它会产生处理非ASCII字符的问题。 / p>
要使没有前缀的UTF-8输出使用XmlWriter
,如下所示:
XmlWriterSettings settings = new XmlWriterSettings();
settings.Encoding = new UTF8Encoding(false);
using (XmlWriter writer = XmlWriter.Create(response.OutputStream, settings)) {
// . . . apply the XSLT sending its output to 'writer' . . .
}
其中response
是正在投放的HTTP请求的HttpResponse
。