·您当前的位置:首页 > 技术教程 > AS2与AS3技术 >

[AS3]as3获取中文字符串长度的代码示例

时间:2012-09-27 08:579ria.com
因为现在工作需要要写socket,但是如果是字符串的话就比较麻烦,因为要知道你所发送和接受到的字符串长度才能进行处理,但是如果是中文,那么一个中文字符是占了两个字节的,所以问题也出现了,问题如下

因为现在工作需要要写socket,但是如果是字符串的话就比较麻烦,因为要知道你所发送和接受到的字符串长度才能进行处理,但是如果是中文,那么一个中文字符是占了两个字节的,所以问题也出现了,问题如下:

  1. var test : String = "abc";  
  2. trace(test.length);     //极酷提示输出3,这里是对的  
  3. var test2 : String = "您好";  
  4. trace(test2.length);    //极酷提示输出是2,明显错误 

那么就有中文必须要识别的麻烦,等着靠String.length的方式来处理那肯定不行的,查了很多资料,有个办法可行,也用了,也能成功,就是取出字符串中的每一个字符,然后转换陈unicon编码,然后比较,如果是大于1000的,就是中文,否则就是英文(这个肯定有纰漏)

于是代码如下(暂时没发现问题,但是算法肯定会出bug)

  1. function GetStringLength(thisString : String) : Number{  
  2.         var thisStringBytsLength : Number = 0;  
  3.         for( var i : Number = 0; i < thisString.length  ; i++ )                        {  
  4.                 if(thisString.charCodeAt(i) >= 1000)  
  5.                 {  
  6.                         //极酷播放器提示:说明该字符是中文  
  7.                         thisStringBytsLengththisStringBytsLength = thisStringBytsLength + 2;  
  8.                 }  
  9.                 else  
  10.                 {  
  11.                         //极酷播放器提示:说明字符非中文  
  12.                         thisStringBytsLength++;  
  13.                 }  
  14.         }  
  15.         return thisStringBytsLength;  

为了解决这个问题,我又查了很多资料,发现as3中非常好用的,可以用socket一起联用的东西,那就是BytArray,大家可以查下相关资料,得到新的计算方法如下:

  1. function GetStringLength(thisString : String) : Number{  
  2.         var thisStringBytsLength :ByteArray = new ByteArray();  
  3.         thisStringBytsLength.writeMultiByte(thisString,CharFormat);  
  4.         return thisStringBytsLength.length;  

这样就不会出错啦···
这里只是一个小小的心得,写得难免会有纰漏,如果有高手发现什么不对的地方,还望指出。

热门文章推荐

请稍候...

保利威视云平台-轻松实现点播直播视频应用

酷播云数据统计分析跨平台播放器