我的Java EE Web应用程序使用XSLT转换来生成CSV报告。
如果我指定“UTF-16”作为XSLT上的编码(这似乎是处理XML中重音字符的唯一方法)那么我在CSV输出的开头得到一个字节顺序标记字符
据我所知,这是正确的行为。问题是如果在Excel中打开CSV(显示为:þÿ),则可以看到此BOM字符,但如果我在正确的文本编辑器中打开它则不会;)
如何隐藏或省略此字符,以便在Excel中打开文件时不可见?
答案 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" />
以下是两个选项:
答案 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>
</xsl:text>
是一种添加换行符的方法。
您可能希望避免在您使用的值中出现的换行符,如下所示:
<xsl:value-of select="replace($foo,'\n','\\n')"/>
当然,您很快就会注意到,如果您在Excel中打开文件,它将变为只读,当您尝试在文件仍处于打开状态时再次生成文件时,这会让您感到烦恼。不像大多数文本编辑器只是告诉你文件已经改变,并提供重新加载它。
-
我意识到这个问题已经过时并且已经回答了,但我希望这有助于未来的某个人。