XSLT输出BOM字符在Excel中可见
我的Java EE Web应用程序使用XSLT转换来生成CSV报告。 如果我在XSLT上指定“UTF-16”作为编码(这似乎是处理XML中的重音字符的唯一方法),那么在CSV输出开始时会得到一个字节顺序标记字符
据我所知,这是正确的行为。 问题是,如果CSV在Excel中打开(显示为:þÿ),则此BOM字符可见,但如果在正确的文本编辑器中打开它,则不会显示该字符;)
如何隐藏或忽略此字符,以便在Excel中打开该文件时不可见?
您忘记指定您正在使用的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呢?
这里有两个选项:
- 升级到XSLT 2.0
- 升级您的Excel到2007年(请参阅这里为什么)
如果你正在编写一个CSV文件,这个方法应该不像Sean B. Durkin所说的那样是“xml”。
我推荐这个configuration来制作一个能够在Excel中正确打开的CSV文件
<xsl:output method="text" byte-order-mark="yes" encoding="UTF-16LE" indent="no"/>
使用XSLT生成CSV时的其他提示:
即使CSV表示“逗号分隔值”,也可以使用TAB字符
我发现我分开的数据往往没有选项卡,但偶尔有逗号。
和<xsl:text>
</xsl:text>
是添加换行符的一种方法。
您可能想要避免在使用的值中出现换行符,如下所示:
<xsl:value-of select="replace($foo,'\n','\\n')"/>
当然,您会很快注意到,如果您在Excel中打开该文件,它将变成只读文件,这在试图在打开文件时再次生成文件时很麻烦。 不像大多数文本编辑器只是告诉你文件已经改变,并提供重新加载它。
–
我意识到这个问题已经过时和已经回答了,但我希望这有助于未来的某个人。