[AS3]as3获取中文字符串长度的代码示例
因为现在工作需要要写socket,但是如果是字符串的话就比较麻烦,因为要知道你所发送和接受到的字符串长度才能进行处理,但是如果是中文,那么一个中文字符是占了两个字节的,所以问题也出现了,问题如下
因为现在工作需要要写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;
- }
这样就不会出错啦···
这里只是一个小小的心得,写得难免会有纰漏,如果有高手发现什么不对的地方,还望指出。
热门文章推荐
- [HLS]做自己的m3u8点播系统使用HTTP Live Streaming(HLS技术)
- [FMS]FMS流媒体服务器配置与使用相关的介绍
- [AS3]什么是M3U8,与HTML5的区别是什么
- AS2.0 让flash自适应全屏,并且不自动缩放
- [AS3]as3.0的sound类常用技巧整理
- [AS3]as3与ByteArray详解、ByteArray介绍、ByteArray用法
- 关于RTMP,RTMPT,RTMPS,RTMPE,RTMPTE协议的介绍
- [JS]分享浏览器弹出窗口不被拦截JS示例
请稍候...