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

18

Я пытаюсь позволить пользователю загрузить файл 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 ответа

30

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

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
источник
  • @zawhtut, какой код вы используете для получения типа браузера? –  Mahmoud Saleh 22.03.2015 в 09:37
  • request.getHeader («User-Agent»); Я думаю. Это было долгое время, когда я опубликовал этот ответ и теперь не могу вспомнить многое. –  zawhtut 22.03.2015 в 09:47
  • Это сообщение в блоге очень полезно при решении таких проблем blogs.msdn.com/b/ieinternals/archive/2010/06/07/... и узнать сведения о браузере fromdev.com/2009/06/dealing- с-другом-клиент-browsers.html –  rakeeee 21.05.2015 в 06:08
  • Одной из наиболее частых причин этой проблемы являются пробелы между именем файла и типом файла, особенно в IE. –  Amir Amiri 21.02.2018 в 13:56
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
источник
  • это сработало для меня –  Abhishek K 22.01.2015 в 13:18
-1
  

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

String fileName = URLEncoder.encode(fileName, "UTF-8");
response.setHeader("Content-Disposition","attachment; filename="+fileName );
    
ответ дан kiran 15.07.2016 в 09:14
источник
  • ваш код не работает, по крайней мере, в FF. –  nllsdfx 19.01.2017 в 10:13