首页 > 解决方案 > 使用 ZK 的 `Filedownload.save()` 时如何指定文本/CSV 文件的编码?

问题描述

我有一些 CSV 格式的报告,我想以 UTF-16LE 格式发送到浏览器,以使 Excel 满意(嗯……是的)。

使用 ZK 时,我可以传递Filedownload.save()大量信息,但如何指定响应标头中应包含的编码?

标签: downloadcharacter-encodinghttpresponsezk

解决方案


开箱即用无法指定每次下载的编码。默认情况下,ZK 只允许您指定每种文件格式的编码。它是这样工作的:

您必须创建一个Media具有格式但没有ctype(内容类型)的实例。然后 ZK 将使用ContentTypes.getContentType().

在这种情况下,这将是:

String bom = "\uFEFF";
AMedia media = new AMedia(filename, "csv", null, bom + dataAsString);
Filedownload.save(media);

注意:bom需要将字节顺序标记添加到下载中,以便 Excel 做正确的事情。对于其他文件格式,您不需要这个。

要设置编码,请在类路径中添加一个文件(使用 Maven 时contentTypes.properties将其放入):src/main/resources/

csv=text/csv;charset=UTF-16LE

ZK 会在启动时解析这个文件。当处理一个Media没有内容类型但有格式的对象时csv,ZK 会将内容类型设置为text/csv;charset=UTF-16LEin AMedia.setup()

另一种选择是创建您自己的Media接口实现,它不会charset从内容类型中剥离部分。

有关的:


推荐阅读