代码语言:javascript复制
package com.game.common
{
import flash.utils.ByteArray;
import flash.utils.Endian;
/**
* Unicode字符工具
* @author Kayer
* */
public final class GameUnicodeTools
{
private static var ins : GameUnicodeTools;
public static function get instance() : GameUnicodeTools
{
if (!ins)
{
ins = new GameUnicodeTools();
}
return ins;
}
public function GameUnicodeTools():void
{
if( ins )
throw Error("GameUnicodeTools 类被设计成单例!");
}
/**解析*/
public function decode( resBytes : ByteArray , len : uint ) : String
{
var bytes : ByteArray = new ByteArray();
bytes.endian = Endian.LITTLE_ENDIAN;
// var surplusLen : uint = ( resBytes.length - resBytes.position 1 > len ) ? len : resBytes.length - resBytes.position 1;
var surplusLen : uint = ( resBytes.length - resBytes.position > len ) ? len : resBytes.length - resBytes.position;
bytes.writeBytes( resBytes , resBytes.position , surplusLen );
resBytes.position = resBytes.position surplusLen - 1;
// bytes.writeByte(0);
// bytes.position = 0;
return this.byArrayToString( bytes );
}
/**
* 加密</br>
* str to unicodeBytes
* */
public function encode( resStr : String , len : uint = 0 ):ByteArray
{
return this.StrToByteArray( resStr , ( len > 0 ) ? len : 0 );
}
//unicode string to ByteArray
private function StrToByteArray( strValue : String, uLen:uint = 0 ):ByteArray
{
var byAaryR:ByteArray = new ByteArray();
byAaryR.endian = Endian.LITTLE_ENDIAN;
for ( var i:int = 0; i < strValue.length; i )
{
byAaryR.writeShort(strValue.charCodeAt(i));
}
for ( i = 0; i < (uLen - strValue.length); i )
{
byAaryR.writeShort(0);
}
return byAaryR;
}
//ByteArray to unicode string
private function byArrayToString( byArray:ByteArray ):String
{
byArray.position = 0;
var strReturn:String = new String();
var strRep:String = "";
// var $cacthBytes : ByteArray = new ByteArray();
// $cacthBytes.endian = Endian.LITTLE_ENDIAN;
var ss : uint = 0;
for(var i:int = 0; i < Math.floor( byArray.length / 2 ) ; i = 1 )
{
// $cacthBytes.clear();
// $cacthBytes.position = 0;
ss = byArray.readShort();
if( ss == 0 )
{
break;
}
else
{
byArray.position -= 2;
if( ss <= 0xff )
{
strRep = byArray.readMultiByte( 1 , "utf-8" );
byArray.position = 1;
}
else
{
strRep = byArray.readMultiByte( 2 , "unicode" );
}
// strReturn = replaceAt(strReturn, strRep, i, i);
strReturn = strRep;
}
}
// var strRep:String = byArray.readMultiByte(byArray.length, "unicode");
return strReturn;
}
private function replaceAt(char:String, value:String, beginIndex:int, endIndex:int):String
{
beginIndex = Math.max(beginIndex, 0);
endIndex = Math.min(endIndex, char.length);
var firstPart:String = char.substr(0, beginIndex);
var secondPart:String = char.substr(endIndex, char.length);
return (firstPart value secondPart);
}
}
}
代码语言:javascript复制