Как указать кодировку текстового / CSV-файла при использовании ZK `Filedownload.save ()`? - PullRequest
0 голосов
/ 17 мая 2018

У меня есть несколько отчетов в формате CSV, которые я хотел бы отправить в браузер как UTF-16LE, чтобы сделать Excel счастливым (ну ... да).

При использовании ZK я могу передать Filedownload.save() много информации, но как мне указать кодировку, которая должна идти в заголовке ответа?

1 Ответ

0 голосов
/ 17 мая 2018

Нет способа указать кодировку для каждой загрузки из коробки.ZK по умолчанию позволяет указывать только кодировку для формата файла.Это работает так:

Вы должны создать экземпляр Media с форматом, но без ctype (тип содержимого).Затем ZK будет искать тип контента (плюс кодировка), используя ContentTypes.getContentType().

. В этом случае это будет:

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

Примечание: bom необходимо длядобавьте Порядок следования байтов к загрузке, чтобы Excel поступил правильно.Для других форматов файлов это не требуется.

Чтобы установить кодировку, добавьте файл contentTypes.properties в ваш путь к классам (укажите его в src/main/resources/ при использовании Maven):

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

ZK проанализирует этот файл во время запуска.Когда обрабатывается объект Media без типа контента, но с форматом csv, ZK устанавливает тип контента на text/csv;charset=UTF-16LE в AMedia.setup().

Другой вариант - создать собственную реализациюинтерфейс Media, который не удаляет часть charset из типа содержимого.

Связанный:

...