【发布时间】:2017-10-26 08:56:52
【问题描述】:
在我的基于 eXist-db 的 Web 应用程序中编写了一个函数,以使用 XQuery 将一些 xml 元素导出到 csv。一切正常,但我的元素中有一些变音符号,如 ü、ä 或 ß,它们在我的 csv 中以错误的方式显示。我尝试使用 fn:normalize-unicode 对内容进行编码,但这不起作用。 这是我的代码 sn-p 的最小化示例:
let $input =
<root>
<number>1234</number>
<name>Aufmaß</name>
</root>
let $csv := string-join(
for $ta in $input
return concat($ta/number/text(), fn:normalize-unicode($ta/name/text())))
let $csv-ueber-string := concat($csv-ueber, string-join($massnahmen, $nl))
let $set-content-type := response:set-header('Content-Type', 'text/csv')
let $set-accept := response:set-header('Accept', 'text/csv')
let $set-file-name := response:set-header('Content-Disposition', 'attachment; filename="export.csv"')
return response:stream($csv, '')
【问题讨论】:
-
那么,您在哪里/如何运行 XQuery,如何保存或存储结果,如何查看结果,您希望 CSV 采用哪种编码方式?
-
我在基于 eXist-db 的 Web 应用程序中使用 XQuery。我使用函数 response:stream() 存储结果(我已经编辑了我的第一篇文章)。下载 csv 后,我在 Excel 中打开它,发现编码并没有真正起作用。好吧,我是编码字符串的新手,但 utf-8 或 cp1250 应该可以完成这项工作。
-
您可能需要为 eXist 添加标签,因为我确信解决方案的一部分是在
response:set-header和response:stream等函数上使用正确的选项或设置。 -
什么版本的 eXist? (Martin,我已按照您的建议添加了 eXist 标签。)
-
您确定它们没有正确序列化,并且不是文本编辑器吗?像 Nodepad 这样的编辑器可能会假设它是 ASCII。可能需要确保 CSV 输出被读取为 UTF-8。尝试在其他编辑器中查看,例如 Nodepad++ ?
标签: csv xquery encode exist-db