as3中中文字符串长度的获取

因为现在工作需要要写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.                         thisStringBytsLength = thisStringBytsLength + 2;
  8.                 }
  9.                 else
  10.                 {
  11.                         //说明字符非中文
  12.                         thisStringBytsLength++;
  13.                 }
  14.         }
  15.         return thisStringBytsLength;
  16. }

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

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

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



发表评论

电子邮件地址不会被公开。 必填项已用 * 标注

*

您可以使用这些 HTML 标签和属性: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

(Spamcheck Enabled)