Проблема с декодированием Flex Base64 - PullRequest
1 голос
/ 03 февраля 2011

Я декодирую строку base64, мне нужно показать декодированное содержимое в окне. Но когда я печатаю, я получаю только bytearrayObject, а не данные.

Как получить данные?

    private function copyByteArray(content:String):void{

        try{

            byteData = new ByteArray();
            //byteData.writeUTFBytes(contents);
            var dec:Base64Decoder = new Base64Decoder();
            dec.decode(content);

           byteData.writeBytes(dec.toByteArray());


            Alert.show("byte Array   " + byteData+" ::  " +contents.length + "::");
}
catch (ex: ErrorEvent){
        Alert.show("error");

    }

}

Ответы [ 3 ]

1 голос
/ 03 февраля 2011

Я почти уверен, что он будет неявно вызывать toString при добавлении его к строковому значению, к сожалению, toStrings, как правило, бесполезны.

Возможно, вам нужно просто пройтись по массиву и прочитатьданные, сделайте что-то вроде следующего:

byteData.position=0;
var tempString:String = byteData.readUTFBytes(byteData.bytesAvailable);
Alert.show(tempString);

для других опций для чтения данных из ByteArray см. ссылку здесь: http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/flash/utils/ByteArray.html

Пожалуйста, подтвердите, что вы сбросили позицию байтамассив в 0, это, кажется, работает для меня (закодированный «тест», затем декодированный и показывает правильно во всплывающем окне, не уверен, что еще ожидается?):

<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml"
                layout="vertical"
                minWidth="955"
                minHeight="600">

    <mx:Script>
        <![CDATA[
            import mx.controls.Alert;
            import mx.utils.Base64Decoder;

            protected function button2_clickHandler(event:MouseEvent):void
            {
                // TODO Auto-generated method stub
                copyByteArray("dGVzdA==");

            }
            private function copyByteArray(content:String):void{

                try{

                    var byteData:ByteArray = new ByteArray();
                    //byteData.writeUTFBytes(contents);
                    var dec:Base64Decoder = new Base64Decoder();
                    dec.decode(content);

                    byteData.writeBytes(dec.toByteArray());
                    byteData.position=0;

                    Alert.show("byte Array   " + byteData.readUTFBytes(byteData.bytesAvailable)+" ::  " +content.length + "::");
                }
                catch (ex: ErrorEvent){
                    Alert.show("error");

                }
            }

        ]]>
    </mx:Script>
    <mx:Button label="Test Byte Array" click="button2_clickHandler(event)"/>
</mx:Application>
0 голосов
/ 03 февраля 2011

Попробуйте что-то вроде этого:

var bytes:ByteArray = new ByteArray();
var bDecoder : Base64Decoder = new Base64Decoder();
bDecoder.decode(urlModifiedString);
bytes = bDecoder.toByteArray() ;

bytes.position = 0;

var returnObj : * = bytes.readObject();

после публикации я только что увидел чей-то readUTFBytes другого пользователя ... если вы хотите сериализовать и десериализовать любой тип объекта ... сверните с вышеприведенным.

0 голосов
/ 03 февраля 2011

Я попробовал это и получил строку в Alert, а не объект byteArray.Кстати, вы должны использовать переменную класса Error (или унаследованные классы), а не какие-либо события.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...