Content-Disposition имя файла на китайском языке не поддерживается - PullRequest
0 голосов
/ 18 мая 2018

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

Технология: Java Server: Apache Tomcat

Это то, что я уже пробовал

response.setHeader("Content-Disposition", "attachment; filename=\"7_6_4_AM__2017_JS_003_南通凤凰服装_B1_108\"");

Вывод (имя загруженного вложения): "7_6_4_AM__2017_JS_003_W_äð"

Я также пытался добавить * к директиве имени файлапосле ссылки на:

https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Disposition response.setHeader("Content-Disposition", "attachment; filename*=\"7_6_4_AM__2017_JS_003_南通凤凰服装_B1_108\"");

Выход (имя загруженного вложения): "706.txt"

Также,

В своем исследовании я обнаружил, что сообщения заголовка HTTP не могут содержать символы вне набора символов ISO-8859-1.

https://tools.ietf.org/html/rfc5987

Заранее спасибо.

1 Ответ

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

Попробуйте установить кодировку символов:

response.setCharacterEncoding("UTF-8");

Вы также можете сначала закодировать свое имя файла:

filename= URLEncoder.encode(fileName, "UTF-8");

Из документа

Устанавливает кодировку символов (кодировка MIME) ответа, отправляемого клиенту, например, в UTF-8.Если кодировка символов уже установлена ​​setContentType (java.lang.String) или setLocale (java.util.Locale), этот метод переопределяет его.Вызов setContentType (java.lang.String) со строкой text / html и вызов этого метода со строкой UTF-8 эквивалентны вызову setContentType со строкой text / html;кодировка = UTF-8.Этот метод может вызываться повторно для изменения кодировки символов. Этот метод не действует, если он вызывается после вызова getWriter или после подтверждения ответа.

...