Xslt 页编码

Xslt 页编码,xslt,xslt-1.0,Xslt,Xslt 1.0,我使用XSLT1.0转换通过服务器返回的一些xml。在.aspx页面上执行。在Google Chrome中,如果我使用以下XSLT编码: <xsl:output method="html" version="4.0" omit-xml-declaration="yes" encoding="utf-8" indent="yes" /> <xsl:output method="html" version="4.0" omit-xml-declaration="yes" enco

我使用XSLT1.0转换通过服务器返回的一些xml。在.aspx页面上执行。在Google Chrome中,如果我使用以下XSLT编码:

<xsl:output method="html" version="4.0" omit-xml-declaration="yes" encoding="utf-8" indent="yes" />
<xsl:output method="html" version="4.0" omit-xml-declaration="yes" encoding="iso-8859-1" indent="yes" />

我在转换后的XML顶部留下了一个空格。 如果我使用这种编码:

<xsl:output method="html" version="4.0" omit-xml-declaration="yes" encoding="utf-8" indent="yes" />
<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' . . .
  }

其中
response
是所服务的HTTP请求的
HttpResponse

我认为问题在于,当您使用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' . . .
  }

其中
response
是所服务的HTTP请求的
HttpResponse

赞成UTF-8。。“iso-8859-1”是拉丁语的本地语言:)对于不需要的空间,为什么不尝试
带空间
?感谢您的回复。真奇怪,空白似乎不是由任何元素生成的。它就在转换后的XML代码的顶部。你能粘贴那个XML吗?那么整个XSL呢?为什么省略XML声明呢?这让Chrome知道它正在读取的XML文档的编码是什么。不幸的是,这在某些浏览器中造成了另一个问题,因为它试图在页面代码中显示XML声明,再次导致不必要的空白。。“iso-8859-1”是拉丁语的本地语言:)对于不需要的空间,为什么不尝试
带空间
?感谢您的回复。真奇怪,空白似乎不是由任何元素生成的。它就在转换后的XML代码的顶部。你能粘贴那个XML吗?那么整个XSL呢?为什么省略XML声明呢?这让Chrome知道它正在读取的XML文档的编码是什么。不幸的是,这在一些浏览器中造成了另一个问题,因为它试图在页面代码中显示XML声明,再次导致不必要的空白。很好。谢谢你的回复,很好。谢谢你的回复。