UTF-8 Имя кодировки в загруженном файле

17

Я пытаюсь позволить пользователю загрузить файл 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));
    
задан zawhtut 05.08.2013 в 06:44
источник

4 ответа

28

Я решил его решить следующим образом.

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();
    }
    
ответ дан zawhtut 05.08.2013 в 12:32
источник
9

Использовать метод 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"));
    
ответ дан Ankur Lathi 05.08.2013 в 06:50
источник
5

В вызове URLEncoder передайте второй необязательный аргумент «UTF-8». См. Ссылка

    
ответ дан Tom 05.08.2013 в 06:53
источник
-1
  

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

String fileName = URLEncoder.encode(fileName, "UTF-8");
response.setHeader("Content-Disposition","attachment; filename="+fileName );
    
ответ дан kiran 15.07.2016 в 09:14
источник