>웹 프론트엔드 >JS 튜토리얼 >JavaScript는 문자열이 차지하는 바이트 수를 계산합니다.

JavaScript는 문자열이 차지하는 바이트 수를 계산합니다.

巴扎黑
巴扎黑원래의
2017-09-15 09:19:551956검색

최근 프로젝트에서는 localStorage에 작성된 문자열이 차지하는 메모리를 계산하기 위해 JS를 사용해야 하기 때문에 이 글에서는 주로 JS를 사용하여 문자열이 차지하는 메모리를 계산하는 방법을 소개합니다. 점유된 바이트 수에 대한 관련 정보를 필요로 하는 친구가 참조할 수 있습니다.

머리말

직장에서 문자열을 자주 접하지만 바이트 수를 제어해야 합니까? 바이트 수는 데이터베이스에서 제어되는 경우가 많기 때문에 프런트 엔드 프로세스에서 판단해야 합니다. 오늘은 이를 공유하겠습니다.

이 글에서는 JS가 문자열이 차지하는 바이트 수를 계산하는 관련 내용을 주로 소개하고 참고 및 학습을 위해 공유합니다. 아래에서는 자세한 소개를 살펴보겠습니다.

샘플 코드


/**
 * 计算字符串所占的内存字节数,默认使用UTF-8的编码方式计算,也可制定为UTF-16
 * UTF-8 是一种可变长度的 Unicode 编码格式,使用一至四个字节为每个字符编码
 * 
 * 000000 - 00007F(128个代码)  0zzzzzzz(00-7F)        一个字节
 * 000080 - 0007FF(1920个代码)  110yyyyy(C0-DF) 10zzzzzz(80-BF)    两个字节
 * 000800 - 00D7FF 
 00E000 - 00FFFF(61440个代码) 1110xxxx(E0-EF) 10yyyyyy 10zzzzzz   三个字节
 * 010000 - 10FFFF(1048576个代码) 11110www(F0-F7) 10xxxxxx 10yyyyyy 10zzzzzz 四个字节
 * 
 * 注: Unicode在范围 D800-DFFF 中不存在任何字符
 * {@link http://zh.wikipedia.org/wiki/UTF-8}
 * 
 * UTF-16 大部分使用两个字节编码,编码超出 65535 的使用四个字节
 * 000000 - 00FFFF 两个字节
 * 010000 - 10FFFF 四个字节
 * 
 * {@link http://zh.wikipedia.org/wiki/UTF-16}
 * @param {String} str 
 * @param {String} charset utf-8, utf-16
 * @return {Number}
 */
  
 var sizeof = function(str, charset){
  var total = 0,
   charCode,
   i,
   len;
  charset = charset ? charset.toLowerCase() : '';
  if(charset === 'utf-16' || charset === 'utf16'){
   for(i = 0, len = str.length; i < len; i++){
    charCode = str.charCodeAt(i);
    if(charCode <= 0xffff){
     total += 2;
    }else{
     total += 4;
    }
   }
  }else{
   for(i = 0, len = str.length; i < len; i++){
    charCode = str.charCodeAt(i);
    if(charCode <= 0x007f) {
     total += 1;
    }else if(charCode <= 0x07ff){
     total += 2;
    }else if(charCode <= 0xffff){
     total += 3;
    }else{
     total += 4;
    }
   }
  }
  return total;
 }

위 내용은 JavaScript는 문자열이 차지하는 바이트 수를 계산합니다.의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.