UTF-8 Имя кодировки в загруженном файле
Я пытаюсь позволить пользователю загрузить файл excel с японским именем. Кажется, что он работает только с IE8 и с другим IE и firefox, он не работает. Пожалуйста, предложите мне, как это сделать.
String fileName = dateString+"_マイページ情報.xls";
byte[] data = writer.getData();
response.setContentType("application/ms-excel");
response.setContentLength(data.length);
response.setHeader("Expires:", "0"); // eliminates browser caching
response.setHeader("Content-Disposition","attachment; filename="+URLEncoder.encode(fileName));
Ответы
Ответ 1
Я решил его решить следующим образом.
fileName = dateString+"_マイページ情報.xls";
fileName = URLEncoder.encode(fileName,"UTF-8");
try {
response.setContentType("application/ms-excel; charset=UTF-8");
response.setCharacterEncoding("UTF-8");
if(browserType.equals("IE")||browserType.equals("Chrome"))
response.setHeader("Content-Disposition","attachment; filename="+fileName);
if(browserType.endsWith("Firefox"))
response.setHeader("Content-Disposition","attachment; filename*=UTF-8''"+fileName);
} catch (Exception e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
Ответ 2
Использовать метод setCharacterEncoding:
Устанавливает кодировку символов (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 был или после ответа.
Измените код следующим образом:
response.setContentType("application/ms-excel; charset=UTF-8");
response.setCharacterEncoding("UTF-8");
response.setHeader("Content-Disposition","attachment; filename="+URLEncoder.encode(fileName, "UTF-8"));
Ответ 3
В вызове URLEncoder передайте второй необязательный аргумент "UTF-8".
См. http://docs.oracle.com/javase/1.4.2/docs/api/java/net/URLEncoder.html#encode (java.lang. Строка, %20java.lang.String)
Ответ 4
Не нужно устанавливать setCharacterEncoding и все, что просто добавить ниже строки его работы прекрасны.
String fileName = URLEncoder.encode(fileName, "UTF-8");
response.setHeader("Content-Disposition","attachment; filename="+fileName );