2012-03-01 74 views
1

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

<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

竖起大拇指到UTF-8 ..“iso-8859-1”是拉丁语的本地:)对于不需要的空间,为什么不尝试'strip-space'? – 2012-03-01 15:50:10

+0

感谢您的回复。这真的很奇怪,白色空间似乎不是由任何元素产生的。它就在转换的XML代码的顶部。 – 2012-03-01 16:03:41

+2

你可以粘贴该XML吗?而整个XSL? – Lukasz 2012-03-02 10:23:42

回答

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被服务。

+0

不错的一个。感谢您的答复。 – 2012-03-23 14:33:51