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)