XSL页面编码

时间:2012-03-01 14:36:03

标签: xslt xslt-1.0

我正在使用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" />

空间已经消失,但像£这样的东西显示为 。从来没有真正理解我应该使用哪种编码。有人能指出我正确的方向吗?感谢。

1 个答案:

答案 0 :(得分:1)

我认为问题是当你使用utf-8编码时,输出文件以指示编码的前缀开头 - 两个字符0xEF0xBB的序列,这个前缀是你看到的额外空间。

您可以检查是否存在保存文件并检查前缀是否存在的情况 - 并查看问题是否消失,手动删除前缀。

当使用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