2009-11-25 3 views
8

Я пытаюсь использовать символы URL-escape (процентов-кодировки) не-ascii в нескольких URL-адресах, с которыми я имею дело. Я работаю с флэш-приложением, которое загружает такие ресурсы, как изображения и звуковые клипы из этих URL-адресов. Поскольку имена файлы могут содержать не-ASCII символы, например, так: 日本語.jpg убегает их UTF-8, кодирующие символы, а затем процент, спасаясь от Юникода байт, чтобы получить следующее:URL-адрес Escaping китайских/японских символов Unicode для Internet Explorer

%E6%97%A5%E6%9C%AC%E8%AA%9E.jpg

Эти имена файлов отлично работают, когда я запускаю приложение в любом браузере, отличном от Internet Explorer. Я пробовал Firefox, Safari и Chrome. Но когда я запускаю приложение в IE (пробовал как 6 и 8), и он пытается загрузить звуковой клип, я получаю: Error #2044: Unhandled ioError и URL был поврежден на что-то вроде:

æ¥æ¬èª.jpg

Любые мысли о том, как это исправить? Это просто тест-драйв флеш-приложения с локальными URL-адресами файловой системы. Я также заметил, что интернет-исследователь не может найти файл, такие как: file:///C:/%E6%97%A5%E6%9C%AC%E8%AA%9E.jpg, хотя Chrome/Firefox будет декодировать его и загружать просто отлично для файла с путем

C:\日本語.jpg

редактировать

Я думаю, что моя проблема такая же, как та, встречающегося в следующем фрагменте кода ActionScript:

import flash.display.Loader; 
import flash.net.URLRequest; 
... 
var ldr:Loader; 
var req:URLRequest = new URLRequest("日本語.jpg"); 
ldr = new Loader(); 
ldr.load(req); 

Использование строки 日本語.jpg будет работать в IE, а строка %E6%97%A5%E6%9C%AC%E8%AA%9E.jpg будет работать в других браузерах. Мне нужна единая форма, которая будет работать во всех браузерах. Я попробовал кодировку %u и установил заголовок http-запроса на Content-Type: text/html; charset=utf-8 без везения ни в процентной, ни в escape-форме.

+0

Windows использует UTF-16 для имен файлов. Поэтому попробуйте '% 65% E5% 67% 2C% 8A% 9E'. – Gumbo

+0

Нет кубиков с именем UTF-16, IE все еще не смог найти его. – Bear

+0

related: http://stackoverflow.com/questions/75980/best-practice-escape-or-encodeuri-encodeuricomponent – cregox

ответ

1

Извините, нет решения, но, возможно, по крайней мере, дополнительная информация о том, что может происходить здесь. (Вероятно, вы уже давно это поняли, но, возможно, это поможет другому читателю найти решение.) «Официальная» спецификация кодирования URL-адресов, похоже, широко раскрывает дверь, как декодировать экранированные URL-адреса, подобные тем, которые вы генерируете - являются ли экранированные объекты, предназначенные для представления символов UTF-8 (как Firefox и т. д.), или символы ASCII (поскольку IE интерпретирует их)? Я не знаю, как заставить стратегию декодирования.

Вопрос только в том, что происходит, если вы вообще не избегаете их, но оставьте unicode в URL-адресе? Хотя у меня нет большого опыта в этом, мне показалось, что я помню, где-то читал, что дни, когда вам нужно избегать unicode в URL-адресах, позади. Не могли бы ошибиться в этом ...

+0

Большинство браузеров выглядят нормально с URL-адресами, содержащими символы юникода. Однако я создаю приложение Flex, и мои URL-адреса являются ссылками на внешние ресурсы, такие как звуковые клипы, изображения, фильмы и т. Д. Когда я запускаю скомпилированный .swf в подключаемом модуле Flash, эти активы загружаются только в том случае, если символы юникода url/percent уклонился от UTF-8. В противном случае они просто не загружаются. Эти процентные имена файлов успешно работают в каждом браузере, кроме Internet Explorer. – Bear

+0

URI/URL (RFC 3986) требует кодирования символов, отличных от ASCII. IRI (RFC 3987), с другой стороны, позволяет большинству символов Unicode не кодироваться. IRI - это новый стандарт, который заменяет старый стандарт URI/URL, но многие системы еще не реализуют IRI. Спецификация IRI предоставляет правила для преобразования IRI в URI/URL и наоборот. –

1

IE использует UTF-8 для HTTP-адресов, но я не уверен в URL-адресах файлов (хотя я тестировал поведение как часть команды IE около 10 лет назад). Если вы используете URLS в HTML, я бы рекомендовал попробовать строковые литералы (если ваша кодировка страницы UTF-8) или числовые ссылки на символы (& #dddd;). IE обычно преобразует символы в подходящую кодировку, которая будет UTF-8 для HTTP-материала, и UTF-16 для взаимодействия локальной файловой системы.

На самом деле HTTP, которому требуется URL-экранирование, а не парсер HTML.

1

Попробуйте кодировать только те части URI, которые могут привести к его неправильной обработке. Например, закодируйте &,? И пробел. Оставьте все остальное как есть, и оно должно работать как шарм.

Если у вас по-прежнему возникают проблемы, вам может потребоваться установить тип содержимого в utf в заголовках http. Что-то вроде Content-type: text/html; кодировка = UTF-8.

+0

К сожалению, фреймворк, с которым я работаю - Flex, не очень хорошо справляется с неэскапированными символами, отличными от ascii. Мне нужно найти, есть ли подходящий способ. Я буду копаться в инфраструктуре Flex, чтобы узнать, можно ли получить доступ к заголовкам HTTP, но я надеялся на решение более высокого уровня. – Bear

1

Почему бы просто не использовать escape-последовательности Unicode? Вставьте его в теле веб-страницы HTML, чтобы увидеть, что я имею в виду:

<script type="text/javascript"> 
     var fileName = "日本語.jpg"; 
     document.write(escape(fileName)); 
    </script> 

я получаю% u65E5% u672C% u8A9E.jpg.

+0

Эти, к сожалению, не работают для меня. Является ли это стандартным способом избежания URL-адресов? Firefox не смог загрузить URL-адрес формы: 'файл: ///.../% u3400.jpg', для файла с именем' 㐀 .jpg' на указанном пути. – Bear

+0

Извините, я думаю, просто работает для JavaScript escape/unescape. Я попробовал кодирование, и он работает для моего локального хоста. Как упоминалось выше, вам может потребоваться указать сервер, на который вы отправляете UTF-8 в заголовке. – Ishmael

+0

Если ваша страница хоста имеет метатег кодирования, который должен сделать для убеждения сервера, на котором вы говорите, UTF-8. Я бы подумал. Может быть. – Ishmael

1

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

+0

Это, оказывается, проблема. Элемент flash active-x (IE) загружает только некодированные URL-адреса файлов, тогда как подключаемый модуль Flash (Chrome, Firefox, Safari и т. Д.) Загружает только URL-адреса закодированных файлов. Единственный способ решения проблемы я был в состоянии думать до сих пор: , если флэш-плеер активно-х использования неперекодированного URL еще использование URL-закодированных URL своего рода Hacky, если вы спросите меня. – Bear

1

файл: // протокол зависит от настроек вашей ОС, если ваши системные настройки не установлены на китайский, но английский, вы не можете позволить IE сделать это.

 Смежные вопросы

  • Нет связанных вопросов^_^