Модераторы: LSD, AntonSaburov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Сохранение клиентом файла, присланного сервлетом, проблема: файл с русским названием 
:(
    Опции темы
alexshr
Дата 29.8.2005, 23:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 4
Регистрация: 29.8.2005

Репутация: нет
Всего: нет



Известно, что направляя по http файл клиенту, можно предложить сохранить этот файл с нужным нам названием.

Например:

response.setContentType("application/octet-stream; charset=windows-1251 ;name="+ fileName);

response.setHeader("Content-Disposition", "attachment; filename="+fileName);

Однако у меня это не работает, если файл имеет русское название.
Например, вместо "тест" получается "B5AB"

Такие штучки как
fileName=new String(fileName.getBytes(),"UTF-8");
или
fileName=new String(fileName.getBytes(),"Cp1251");

не помогают

есть ли удачные решения данной проблемы?
-----------------------------------------------------------
использую спецификацию Servlet 2.3
WAS 5.1 (Websphere)
браузер 6.0 sp2
PM MAIL   Вверх
3,14
Дата 30.8.2005, 09:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1614
Регистрация: 18.6.2004
Где: Н. Новгород

Репутация: 3
Всего: 24



Попробуй сжелать строку как UTF-8, а
Цитата(alexshr @ 29.8.2005, 23:19)
charset=windows-1251

Убрать к чёртовой бабушке, он то для файла точно не нужен


--------------------
Может быть, это только мой бред,
Может быть, жизнь не так хороша,
Может быть, я не выйду на свет,
Но я летал, когда пела душа...
PM MAIL   Вверх
pvo
Дата 30.8.2005, 09:16 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











URLEncoder спасет отца русской демократии.
Есть только закавыка - сей финт не работает с Firefox/Mozilla smile
  Вверх
alexshr
Дата 30.8.2005, 11:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 4
Регистрация: 29.8.2005

Репутация: нет
Всего: нет



Дорогие товарищи!
Спасибо за участие.
Я нашел решение это проблемы.
Если кому интересно - могу поделиться
PM MAIL   Вверх
3,14
Дата 30.8.2005, 11:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1614
Регистрация: 18.6.2004
Где: Н. Новгород

Репутация: 3
Всего: 24



Цитата(alexshr @ 30.8.2005, 11:08)
Если кому интересно - могу поделиться

Делись конечно


--------------------
Может быть, это только мой бред,
Может быть, жизнь не так хороша,
Может быть, я не выйду на свет,
Но я летал, когда пела душа...
PM MAIL   Вверх
alexshr
Дата 30.8.2005, 13:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 4
Регистрация: 29.8.2005

Репутация: нет
Всего: нет



Нашел вот что.. Интересно публикует ли Микрософт информацию подобного рода, и если да, то где...

Код

public static String encodeFileName(String fileName,HttpServletRequest request) throws Exception{
        //String fileName = "Русское название";
        StringBuffer encoded_filename = new StringBuffer();
        if (request.getHeader("User-Agent").indexOf("Opera") != -1 || request.getHeader("User-Agent").indexOf("MSIE") == -1) {
            encoded_filename.append(new String(fileName.getBytes("cp1251"),"ISO8859_1"));    //mozilla
        } else {
            char[] hexdigits = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F'};    //MSIE
            byte[] fileNameBytes = fileName.getBytes("UTF-8"); 
            for (int i = 0; i < fileNameBytes.length; ++i) {
                if ((fileNameBytes[i] | 0x7F) == 0xFFFFFFFF) { 
                    encoded_filename.append('%');
                    encoded_filename.append(hexdigits[(fileNameBytes[i] & (15 * 16)) / 16]);
                    encoded_filename.append(hexdigits[fileNameBytes[i] & 15]);
                } else {
                    encoded_filename.append((char) fileNameBytes[i]);
                }
            }
        }
        return encoded_filename.toString();
    }

PM MAIL   Вверх
pvo
Дата 30.8.2005, 15:31 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











С URLEncoder было бы короче:

String encodedName = URLEncoder.encode( fileName ); // Предполагается, что fileName в UTF-8
  Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java EE (J2EE) и Spring | Следующая тема »


 




[ Время генерации скрипта: 0.0881 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.