Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   UILoader и кириллица: ошибка при загрузке. (http://www.flasher.ru/forum/showthread.php?t=145308)

ChuwY 04.10.2010 17:58

UILoader и кириллица: ошибка при загрузке.
 
Добрый день, господа флешеры, надеюсь на вашу помощь.

В чем проблема:
Как можно понять по названию темы, когда я использую для указания пути загрузки кириллицу, возникает ошибка, которая слегка ставит меня в ступор.

Вот класс, в котором все происходит:

Код AS3:

package src.UI {
        import fl.containers.UILoader;
        import flash.net.URLRequest;
        import flash.events.Event;
        import flash.events.EventDispatcher;
        import flash.events.IOErrorEvent;
        import flash.events.ProgressEvent;
        import flash.events.SecurityErrorEvent;
 
        public class Book extends EventDispatcher{
                public var pages : Vector.<UILoader>;
                public var name  : String;
 
                private var totalPages : int;
                private var loadedPages : int;
 
                public function Book(_name : String, _sourcePath : String, _totalPages: int){
                  var urlRequest : URLRequest;
                        var newPage    : UILoader;
 
                        pages = new Vector.<UILoader>();
                        totalPages = _totalPages;
                        name = _name;
                        for(var i : int = 1; i <= totalPages; i++){
                                urlRequest = new URLRequest(_sourcePath + "page" + i.toString() + ".swf");
                          newPage    = new UILoader();
                          newPage.addEventListener(IOErrorEvent.IO_ERROR, IOErrorHandler);
                                newPage.addEventListener(ProgressEvent.PROGRESS, progressHandler);
                                newPage.addEventListener(SecurityErrorEvent.SECURITY_ERROR, securityErrorHandler);
                                newPage.addEventListener(Event.OPEN, openHandler);
                                newPage.autoLoad = false;
                                newPage.source  =  urlRequest.url;
                                pages.push(newPage);
                        }
                  trace("totalPages = " + totalPages + " sourcePath " + _sourcePath);
                }
 
                /// methods
 
                public function load():void{
                        pages[0].addEventListener(Event.COMPLETE, loadCompleteHandler);
                        pages[0].load();
                }
 
                /// private functions
 
                private function loadCompleteHandler(event : Event):void{
                  trace(event);
                        event.currentTarget.removeEventListener(Event.COMPLETE, loadCompleteHandler);
                        loadedPages++;
                        if(loadedPages == totalPages){
                          dispatchEvent(new Event(Event.COMPLETE));
                        } else {
                                pages[loadedPages].addEventListener(Event.COMPLETE, loadCompleteHandler);
                          pages[loadedPages].load();
                        }
                }
 
                private function progressHandler(event : ProgressEvent):void{
                        trace(event);
                }
 
                private function IOErrorHandler(event : IOErrorEvent):void{
                        trace(event);
                }
 
                private function openHandler(event : Event):void{
                  trace(event);
                }
 
                private function securityErrorHandler(event :SecurityErrorEvent):void{
                  trace(event);
                }
        }
}

Когда в пути нет русских букв все отлично работает, но когда они есть выскакивает, например, такая ошибка:

Error opening URL 'http://127.0.0.1/denwer/pdfreader/users/chuwy/convertedBooks/Контрольные задания(2)/page1.swf'
[IOErrorEvent type="ioError" bubbles=false cancelable=false eventPhase=2 text="Error #2036: Загрузка не завершена. URL: http://127.0.0.1/denwer/pdfreader/us...ks/Контрольные задания(2)/page1.swf"]

Но ей предшествует вывод:

[ProgressEvent type="progress" bubbles=false cancelable=false eventPhase=2 bytesLoaded=0 bytesTotal=2112]
[ProgressEvent type="progress" bubbles=false cancelable=false eventPhase=2 bytesLoaded=798 bytesTotal=2112]
[ProgressEvent type="progress" bubbles=false cancelable=false eventPhase=2 bytesLoaded=2112 bytesTotal=2112]

Что говорит о том, что грузиться то все-таки файл грузится.
Я могу, конечно, обойтись без кириллицы, транслитилируя пути, но очень интересно почему такое происходит.
Подскажите пожалуйста, что я делаю не так.

-De- 04.10.2010 18:07

Я думаю, грузится хтмл файл, в котором написано с форматированием и пр "ОШИБКА 404, НЕТ ТУТ ТАКОГО". Потому что надо урленкодить путь. Вродь escapeMultiByte делает что надо

campu 04.10.2010 18:08

аналогичная проблема. гружу файлы с русскими названиями на сервер, затем отображая их внутри флеша. для загрузки на сервер использую FileReference + пхп. файлы на сервер загружаются, пхп отлично загружает по русски на сервер, а вот флеш не читает оттуда, обращаясь к файлу с русским названием. знающие кодеры, дайте совет на "вечный" вопрос: Что делать? )

ChuwY 04.10.2010 18:14

Кстати, кстати, кстати да.
Не заметил сразу, что размер ошибочного ответа всегда один и тот же и, что характерно, не соответствует размеру файла =) Виноват, исправлюсь.
Сейчас попробую последовать совету.



Код AS3:

System.useCodePage = true;
urlRequest = new URLRequest(unescapeMultiByte(_sourcePath));

И проблема решена, как и ожидалось.
Еще раз большое спасибо!

dimarik 05.10.2010 00:30

Цитата:

Сообщение от -De- (Сообщение 940726)
Потому что надо урленкодить путь. Вродь escapeMultiByte делает что надо

А разве браузерный движок не делает urlEncode?


Часовой пояс GMT +4, время: 10:29.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.