AS3 用UTF编码的话 最好用byteArray的 writeUTF 或者 writeUTFBytes方法
Unicode字符集在编码汉字的时候,应该是一个汉字三个字节的
http://happear.iteye.com/blog/714928
ByteArray有两个函数可以转化汉字成字节数组:
第一个是writeMultiByte;
第二个是writeUTFBytes;
//byte.writeMultiByte("钟","gbk"); //两个字节 utf8(无效格式或自定义格式)
byte.writeUTFByte("钟") //三个字节 utf-8
byte.position = 0;
while(byte.bytesAvailable > 0){
trace(byte.readByte());
}
for(var i:int=0; i<byte.length; i++){
trace(byte[i],byte[i].toString(16))
}
/*
-42 -45
d6 d3 (5453区位编码)
-23 -110 -97
*/
结:输入与输出编码格要统一才不会乱码
byte.writeUTFByte("钟") //三个字节 utf-8
byte.position = 0;
while(byte.bytesAvailable > 0){
trace(byte.readByte());
}
for(var i:int=0; i<byte.length; i++){
trace(byte[i],byte[i].toString(16))
}
/*
-42 -45
d6 d3 (5453区位编码)
-23 -110 -97
*/
结:输入与输出编码格要统一才不会乱码
1.转为Base64字符
DisplayObject>bitmapData>ByteArray>Base64>String
把图片转化为二进制或字符,使用AS3自带的JPEGEncoder和PNGEncoder的encoder方法,其中PNGEncoder为静态方法
var bit:Bitmap = e.target.content as Bitmap;
var byte:ByteArray = PNGEncoder.encode(bit.bitmapData);
var str:String = Base64.encodeByteArray(byte);//使用base64转为字符
var byte:ByteArray = PNGEncoder.encode(bit.bitmapData);
var str:String = Base64.encodeByteArray(byte);//使用base64转为字符
2.字符转图片
过程:String>Base64>ByteArray>Bitmap>DisplayObject
还原时,先使用Base64Decoder转为Base64编码的ByteArray,再用Loader.loadBytes(bytes) 对象来读取为Bitmap或(PNGDecoder.decodeImage(bytes))
var byte1:ByteArray = Base64.decodeToByteArray(str);
var load:Loader=new Loader();
load.loadBytes(byte1);//读取ByteArray
load.contentLoaderInfo.addEventListener(Event.COMPLETE, compl);
private function compl(event:Event):void {
var bitMap:Bitmap=event.target.content as Bitmap;//读取Bitmap
this.addChild(bitMap);
}
var load:Loader=new Loader();
load.loadBytes(byte1);//读取ByteArray
load.contentLoaderInfo.addEventListener(Event.COMPLETE, compl);
private function compl(event:Event):void {
var bitMap:Bitmap=event.target.content as Bitmap;//读取Bitmap
this.addChild(bitMap);
}
与ByteArray有相关的类:
URLLoader --->URLLoaderDataFormat.BINARY 可解决加载数据乱码问题
1.URLLoader如果遇到乱码,则可以转换
var _byteArray:ByteArray = new ByteArray;
_byteArray.writeBytes(event.target.data);
var xml:XML = XML(_byteArray.readUTFBytes(_byteArray.length))
_byteArray.writeBytes(event.target.data);
var xml:XML = XML(_byteArray.readUTFBytes(_byteArray.length))
2.urlloader加载图片
//加载二进制数据图片
var urlloader:URLLoader = new URLLoader();
urlloader.dataFormat = URLLoaderDataFormat.BINARY;
urlloader.addEventListene(Event.COMPLETE,urlHandler);
urlloader.load(new URLRequest("test.png"));
//data数据
var byte:ByteArray = e.target.data as ByteArray;
//使用load.loadBytes(byte)加载
var load:Loader=new Loader();
load.loadBytes(byte);//读取ByteArray
load.contentLoaderInfo.addEventListener(Event.COMPLETE, compl)
var urlloader:URLLoader = new URLLoader();
urlloader.dataFormat = URLLoaderDataFormat.BINARY;
urlloader.addEventListene(Event.COMPLETE,urlHandler);
urlloader.load(new URLRequest("test.png"));
//data数据
var byte:ByteArray = e.target.data as ByteArray;
//使用load.loadBytes(byte)加载
var load:Loader=new Loader();
load.loadBytes(byte);//读取ByteArray
load.contentLoaderInfo.addEventListener(Event.COMPLETE, compl)