Подтвердить что ты не робот

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));
4b9b3361

Ответ 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"));

Ответ 4

Не нужно устанавливать setCharacterEncoding и все, что просто добавить ниже строки его работы прекрасны.

String fileName = URLEncoder.encode(fileName, "UTF-8");
response.setHeader("Content-Disposition","attachment; filename="+fileName );