【问题标题】:XSL page encodingXSL 页面编码
【发布时间】:2012-03-01 14:36:03
【问题描述】:

我正在使用 xslt 1.0 转换通过 .aspx 页面上的 Server.Execute 返回的一些 xml。如果我使用以下 XSLT 编码,在 Google Chrome 中:

<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 .. "iso-8859-1" 是拉丁语的本地语言 :) 对于不需要的空间,你为什么不试试 strip-space ??
  • 感谢您的回复。真的很奇怪,空白似乎不是由任何元素生成的。它就在转换后的 XML 代码的顶部。
  • 你能粘贴那个 XML 吗?还有整个 XSL?
  • 为什么要省略 XML 声明——它让 Chrome 知道它正在读取的 XML 文档是什么编码的。
  • 是的。不幸的是,这在某些浏览器中引起了另一个问题,因为它试图在页面代码中显示 XML 声明,再次导致不需要的空白。

标签: xslt xslt-1.0


【解决方案1】:

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

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

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

【讨论】:

  • 不错的一个。感谢您的回复。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-07-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-02-01
相关资源
最近更新 更多