JS计算UTF8字符串占用字节数(escape版与UTF8专用版)

来源:互联网 发布:如何改变自己 知乎 编辑:程序博客网 时间:2024/04/30 11:30
使用escape是为了使所有编码都转换成统一的编码格式(Unicode), 如GBK编码的"中国", 与UTF8编码的"中国",它们的escape返回值都是一样的,所以代码具有通用性,且escape在JS1.0已经有了,各浏览器都通用

如果不考虑通用性,且html为UTF8编码的,可以用UTF8版本

utf8_strlen2是escape版,utf8_strlen是utf8专用版

<!DOCTYPE html><html><head><meta charset="UTF-8"><script type="text/javascript" src="../../jquery.min.js"></script><script type="text/javascript" src="../../jquery.easyui.min.js"></script>    <script type="text/javascript">  function testGetCharBytes() {     alert(utf8_strlen($("#username").val()));  }  function utf8_strlen2(str)      {var cnt = 0;for( i=0; i<str.length; i++){var value = str.charCodeAt(i);if( value < 0x080){cnt += 1;}else if( value < 0x0800){cnt += 2;}else {cnt += 3;}}return cnt;      }  function utf8_strlen(str)      {var str_encode = escape(str);var cnt = 0;for( i=0; i<str_encode.length; i++){if( str_encode.charAt(i) == "%"){if( str_encode.charAt(i+1) == "u" ){var value = parseInt(str_encode.substr(i+2,4),16);if( value < 0x0800){cnt += 2;}else{cnt += 3;}i = i+5;}else{cnt++;i = i+2;}}else{cnt++;}}      return cnt;     }</script></head><body><input type="text" name="username" id="username"></input><br/>    <input type="button" value="测试" onclick="testGetCharBytes();"></input></body></html>


0 0
原创粉丝点击