2016-10-13 00:16:48 点击量:49 标签: 收藏本文
因为现在工作需要要写socket,但是如果是字符串的话就比较麻烦,因为要知道你所发送和接受到的字符串长度才能进行处理,但是如果是中文,那么一个中文字符是占了两个字节的,所以问题也出现了,问题如下:
- var test : String = "abc";
- trace(test.length); //极酷提示输出3,这里是对的
- var test2 : String = "您好";
- trace(test2.length); //极酷提示输出是2,明显错误
那么就有中文必须要识别的麻烦,等着靠String.length的方式来处理那肯定不行的,查了很多资料,有个办法可行,也用了,也能成功,就是取出字符串中的每一个字符,然后转换陈unicon编码,然后比较,如果是大于1000的,就是中文,否则就是英文(这个肯定有纰漏)
于是代码如下(暂时没发现问题,但是算法肯定会出bug)
- function GetStringLength(thisString : String) : Number{
- var thisStringBytsLength : Number = 0;
- for( var i : Number = 0; i < thisString.length ; i++ ) {
- if(thisString.charCodeAt(i) >= 1000)
- {
- //极酷播放器提示:说明该字符是中文
- thisStringBytsLengththisStringBytsLength = thisStringBytsLength + 2;
- }
- else
- {
- //极酷播放器提示:说明字符非中文
- thisStringBytsLength++;
- }
- }
- return thisStringBytsLength;
- }
为了解决这个问题,我又查了很多资料,发现as3中非常好用的,可以用socket一起联用的东西,那就是BytArray,大家可以查下相关资料,得到新的计算方法如下:
- function GetStringLength(thisString : String) : Number{
- var thisStringBytsLength :ByteArray = new ByteArray();
- thisStringBytsLength.writeMultiByte(thisString,CharFormat);
- return thisStringBytsLength.length;
- }
这样就不会出错啦···
这里只是一个小小的心得,写得难免会有纰漏,如果有高手发现什么不对的地方,还望指出。
我们是一家提供综合软件外包与弱电工程服务的技术公司。
业务涵盖定制软件、管理系统、网站、小程序、APP、系统集成、网络布线、监控安防、门禁、机房建设及长期技术维护。
公司地址:湖北省宜昌市伍家岗区东站二路6号三峡(宜昌)大数据产业园海洋馆二楼A203室