Страница: 1 |
|
Вопрос: Проблема с русскими именами файлов
|
Добавлено: 06.08.08 12:12
|
|
Автор вопроса: andrywa
|
У меня возникла вот такая интересная проблема:
Проблема с руским именем файла.
Я написал web-приложение на Visual Basic 6.0. Использую при этом ASP (не ASP.NET).
В меня есть режим для загрузки файлов. Когда кликаеш в IE на файле я заталкиваю в header -"Content-Disposition=attachment;filename=..." Всплывает диалоговое окошко IE с выбором сохранить ли этот файл или сразу открыть. Имя файла при этом в диалоговом окне НОРМАЛЬНОЕ, нормальное и при выборе сохранить. Но если выбрать "Открыть" то файл загружается в временную папку и отрывается с НЕ НОРМАЛЬНЫМ именем в котором куча крокодилчиков вместо руских символов. Делаю я это так:
-------------------------------------------
Response.Clear
s = Server.URLPathEncode(sfileName)
Response.AddHeader "Content-Disposition", " attachment;filename=""" & s & """"
Response.ContentType = sContentType
Response.BinaryWrite sBinaryData
-------------------------------------------
это упрощенный вавриант
На Opera и Firefox - все Ок, а на IE вот такая загвоздка....
Или же IE намеренно сохраняет файлы в временной папке с именами в URL виде???
Или как то нужно по особому для IE задавать кодировку??
Помогите или подскажите может я что-то делаю не так...
Ответить
|
Номер ответа: 5 Автор ответа: andrywa
Вопросов: 1 Ответов: 3
|
Профиль | | #5
|
Добавлено: 07.08.08 11:38
|
я на http debug pro смотрел уже давно и вот например что я получаю в response для IE
------------------------------------
HTTP/1.1 200 OK
Server: Microsoft-IIS/5.1
Date: Thu, 07 Aug 2008 07:04:07 GMT
Content-Disposition: attachment;filename="%D0%92%D0%B5%D1%80%D1%81%D0%B8%D1%8F%20%D0%90%D0%B2%D1%82%D0%BE%20%D0%BE%D1%80%D0%B8%D0%B3%D0%B8%D0%BD%D0%B0.doc"
Content-Length: 242176
Content-Type: application/msword; Charset=utf-8
Expires: Thu, 07 Aug 2008 07:04:08 GMT
Cache-control: private
и дальше сам файл
-------------------------------------------------------
а это для Opera на которой все окей:
---------------------------------------
HTTP/1.1 200 OK
Server: Microsoft-IIS/5.1
Date: Thu, 07 Aug 2008 07:04:37 GMT
Content-Disposition: attachment;filename*=utf-8''%D0%92%D0%B5%D1%80%D1%81%D0%B8%D1%8F%20%D0%90%D0%B2%D1%82%D0%BE%20%D0%BE%D1%80%D0%B8%D0%B3%D0%B8%D0%BD%D0%B0%D0%BB.doc
Content-Length: 242176
Content-Type: application/msword; Charset=utf-8
Expires: Thu, 07 Aug 2008 07:04:37 GMT
Cache-control: private
и дальше сам файл
---------------------------------------
оба получают в крокозябликах как и должно быть, но опера извекла нужное русское имя и оно уже всегда остается таким, ie извлекает нормальное русское имя в диалоговом окоше там где предлагается открыть или сохранить, но если выбрать открыть - то имя уже становится такое как в response header, а не русское
Что с этим можна делать???
С оперой все просто: пишу "filename*=utf-8''...", чем говорю что это имя по любом должно быть в utf-8... А можна например что то такое же сделать с IE??
Вся проблема в том, что IE почему-то сохраняет файл во временной папкес именем в URL кодировке и потом файл, соответственно, открывается не с руским именем, а с именем в URL кодировке.
Ответить
|
Номер ответа: 8 Автор ответа: andrywa
Вопросов: 1 Ответов: 3
|
Профиль | | #8
|
Добавлено: 08.08.08 10:53
|
Это кодировка "quoted-printable" если интересует как из нее декодировать то у меня есть пример на C#.Net
Я использую Server.URLPathEncode в Visual Basic 6.0, это так и должно передаватся, посколько в меня русское имя файла, а русские символы как раз таки и должны передаватся в кодированом виде.
Наверно вы не совсем правильно поняли
"%D0%92%D0%Bjavascript:document.messageeditor.submit();5%D1%80%D1%81%D0%B8%D1%8F%20%D0%90%D0%B2%D1%82%D0%BE%20%D0%BE%D1%80%D0%B8%D0%B3%D0%B8%D0%BD%D0%B0.doc"
преобразовать вот такую строку в нормальное имя это задача браузера, с которой IE справляется в диалоговом окне, но при нажатии "открыть" он должен сохранить этот файл в своей временной папке, а дальше вызвать этот файл на открытие в проге которае открывает файлы такого розширения. IE так и делает но при этом он теряет русское имя и запихивает во временную папку файл с именем "%D0%92%D0%B5%D1%80%D1%81%D0%B8%D1%8F%20%D0%90%D0%B2%D1%82%D0%BE%20%D0%BE%D1%80%D0%B8%D0%B3%D0%B8%D0%BD%D0%B0.doc", а остальные браузеры этого не делают, тоесть запихивют в свою временную папку файл с русским именем и потом он открывается тоже с руским именем, а не как после IE с страшным и длинным именем.
Так вот вопрос собственно в следуещем:
Должен ли IE так делать???
Или же это его недоработка, глюк, баг или еще что-то???
Или же для IE как-то по особому надо задавать кодировку чтоб он такого не делал??
Ответить
|
Страница: 1 |
Поиск по форуму