AS3 unicode

发布时间:2019-08-25 09:37:41编辑:auto阅读(1261)

    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);
    		}
    	}
    }


关键字

上一篇: BGP学习 总结3

下一篇: openstack issue 3