在Excel中可见的XSLT输出BOM字符

时间:2012-11-08 16:08:20

标签: excel xslt byte-order-mark

我的Java EE Web应用程序使用XSLT转换来生成CSV报告。 如果我指定“UTF-16”作为XSLT上的编码(这似乎是处理XML中重音字符的唯一方法)那么我在CSV输出的开头得到一个字节顺序标记字符

据我所知,这是正确的行为。问题是如果在Excel中打开CSV(显示为:þÿ),则可以看到此BOM字符,但如果我在正确的文本编辑器中打开它则不会;)

如何隐藏或省略此字符,以便在Excel中打开文件时不可见?

2 个答案:

答案 0 :(得分:4)

您忘了指定正在使用的XSLT版本。

如果您使用的是XSLT 2.0,则可以使用xsl:output元素来抑制BOM。例如......

<xsl:output method="xml" byte-order-mark="no" encoding="UTF-16" indent="yes" omit-xml-declaration="yes" />

如果您使用的是XSLT 1.0,该怎么办?

以下是两个选项:

  1. 升级到XSLT 2.0
  2. 将Excel升级到2007(请参阅here了解原因)

答案 1 :(得分:1)

如果您正在编写CSV文件,则该方法可能不应该是&#34; xml&#34;正如Sean B. Durkin建议的那样。

我建议使用此配置制作可在Excel中正确打开的CSV

<xsl:output method="text" byte-order-mark="yes" encoding="UTF-16LE" indent="no"/>

使用XSLT生成CSV时的其他提示:

您可以使用TAB字符,即使CSV表示&#34;逗号分隔值&#34;

我发现我分开的数据通常没有标签,但偶尔会有逗号。

<xsl:text>&#xa;</xsl:text>是一种添加换行符的方法。

您可能希望避免在您使用的值中出现的换行符,如下所示:

<xsl:value-of select="replace($foo,'\n','\\n')"/>

当然,您很快就会注意到,如果您在Excel中打开文件,它将变为只读,当您尝试在文件仍处于打开状态时再次生成文件时,这会让您感到烦恼。不像大多数文本编辑器只是告诉你文件已经改变,并提供重新加载它。

-

我意识到这个问题已经过时并且已经回答了,但我希望这有助于未来的某个人。