宜昌本地软件开发与弱电工程服务商
项目咨询 · 快速响应
您当前的位置: > 博客2 > AS2与AS3技术

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

2016-10-13 00:16:48 点击量:49 标签: 收藏本文

因为现在工作需要要写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;  

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

ABOUT US
宜昌农人网络科技有限公司

我们是一家提供综合软件外包与弱电工程服务的技术公司。

业务涵盖定制软件、管理系统、网站、小程序、APP、系统集成、网络布线、监控安防、门禁、机房建设及长期技术维护。

公司地址:湖北省宜昌市伍家岗区东站二路6号三峡(宜昌)大数据产业园海洋馆二楼A203室