我使用xslt 1.0来转换通过Server.Execute在.aspx页面上返回的一些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" />
空间已经消失了,但像£这样的东西显示为�.从未真正理解我应该使用哪种编码。有人能给我指正确的方向吗?谢谢
我认为问题在于,当您使用utf-8编码时,输出文件以一个指示编码的前缀开始——一个由两个字符0xEF
和0xBB
组成的序列,而这个前缀就是您看到的额外空间。
您可以检查是否是这种情况,保存文件并检查前缀是否存在,然后查看手动删除前缀是否会解决问题。
当使用iso-8859-1(或其他非Unicode编码)时,没有前缀,因此没有问题,但使用非Unicode编码通常是个坏主意,因为它会在处理非ASCII字符时产生问题。
要获得不带前缀的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' . . .
}
其中CCD_ 4是所服务的HTTP请求的CCD_。