Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - ASP и VBScript

Страница: 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 задавать кодировку??

Помогите или подскажите может я что-то делаю не так...

Ответить

  Ответы Всего ответов: 8  

Номер ответа: 1
Автор ответа:
 



Администратор

ICQ: 278109632 

Вопросов: 42
Ответов: 3949
 Web-сайт: domkratt.com
 Профиль | | #1
Добавлено: 06.08.08 13:11
Вывод? Убрать IE из стандартной поставки винды и воткнуть туда оперу =) Какая тебе разница с каким именем он сохраняет файл во временной папке? Сохраняет и ладно =) Может сохраняет URL-Encoded, может еще как-то. У всех продуктов мелкомягких свои причуды...

Ответить

Номер ответа: 2
Автор ответа:
 andrywa



Вопросов: 1
Ответов: 3
 Профиль | | #2 Добавлено: 06.08.08 13:22
Да я сам на опере сижу.
А беда в следуещем:
Выбираем кнопку "открыть" (моем случае этот файл "Версия.doc";) и IE сохраняет его во временной папке как %xx%xx%xx%xx%xx%xx.doc", где xx - думаю понимаем что такое :), а потом уже открывает то что сам сохранил. В результате в меня открывается ворд, в нем в заголовке вместо "Версия" одни крокодилы, которых так и хочется поубивать )) Это же как по мне ненормально и ужас как не удобно, ведь если кликнул открыть и чтоб потом этот файл в случае чего нужно на локальной машине сохранять - то нужно вручную это чудо переименовувать на нужное имя, которое в большенстве случаев при пересмотре документа в голове просто-напросто забывается. Это все вызывает кучу неудобств :(
И еще дело в том что большинство народа сидит на IE... На опере и фаерфоксе все отлично работает :)

Ответить

Номер ответа: 3
Автор ответа:
 



Администратор

ICQ: 278109632 

Вопросов: 42
Ответов: 3949
 Web-сайт: domkratt.com
 Профиль | | #3
Добавлено: 06.08.08 13:49
Ну что ж тут поделаешь... Не знаю. Видимо, тут ничем не помочь. Разве что патч для осла написать =)

Ответить

Номер ответа: 4
Автор ответа:
 Artyom



Разработчик

Вопросов: 130
Ответов: 6602
 Профиль | | #4 Добавлено: 06.08.08 19:44
Ну посмотри http-снифером что там происходит.

Могу поспорить, проблема с кодировкой.

Ответить

Номер ответа: 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 кодировке.

Ответить

Номер ответа: 6
Автор ответа:
 



Администратор

ICQ: 278109632 

Вопросов: 42
Ответов: 3949
 Web-сайт: domkratt.com
 Профиль | | #6
Добавлено: 07.08.08 12:15
А можна например что то такое же сделать с IE??

Что ты можешь сделать с ослом, вот скажи? И пользователям потом будешь писать, мол, откройте осла, потом командную строку, напишите там "SET IE_CHARSET = utf-8; UPDATE IE CONFIG;"? Нафиг оно юзерам не надо.
Ничего тут не поделаешь, видимо. Переводи имена в транслит на сервере.

Ответить

Номер ответа: 7
Автор ответа:
 aleks_prl



Вопросов: 3
Ответов: 3
 Профиль | | #7 Добавлено: 07.08.08 20:57
 "%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"
Это кодировка "quoted-printable" если интересует как из нее декодировать то у меня есть пример на C#.Net

Ответить

Номер ответа: 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 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам