我的 Java EE Web 应用程序使用 XSLT 转换来生成 CSV 报告。如果我将“UTF-16”指定为 XSLT 上的编码(这似乎是处理 XML 中重音字符的唯一方法),那么我会在 CSV 输出的开头得到一个字节顺序标记字符
。理解,这是正确的行为。问题是,如果在 Excel 中打开 CSV(显示为:þÿ),则此 BOM 字符可见,但如果我在适当的文本编辑器中打开它则不可见;)
如何隐藏或省略此字符,使其不可见什么时候在 Excel 中打开文件?
问问题
4280 次
2 回答
5
您忘记指定正在使用的 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(请参阅此处了解原因)
于 2012-11-08T22:42:38.777 回答
1
如果您正在编写 CSV 文件,则该方法可能不应该是 Sean B. Durkin 建议的“xml”。
我建议使用此配置来制作可以在 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 中打开文件,它会变为只读,当您尝试在文件仍处于打开状态时再次生成文件时,这会很麻烦。与大多数文本编辑器不同,它们只是告诉您文件已更改,并提供重新加载它。
-
我意识到这个问题已经过时并得到了回答,但我希望这对未来的人有所帮助。
于 2017-02-04T00:34:11.973 回答