понедельник, 15 августа 2011 г.

JavaScript. Получить длину строки в байтах

Мне потребовалась функция подсчета количества байтов в строке (в UTF8 разные символы имеют длину от 1 до 6 байтов). Как источник - использовал статью на Википедии: UTF-8, там я подсмотрел в таблицу, в которой указано сколько байтов занимает символ, в зависимости от порядкового номера. Потом расширил стандартный класс String - новой удобной функцией, которая, корректно находит длину строки в байтах, а не символах:
String.prototype.byteLength = function(){
   var str = this, length = str.length, count = 0, i = 0, ch = 0;
   for(i; i < length; i++){
     ch = str.charCodeAt(i);
     if(ch <= 127){
        count++;
     }else if(ch <= 2047){
        count += 2;
     }else if(ch <= 65535){
        count += 3;
     }else if(ch <= 2097151){
        count += 4;
     }else if(ch <= 67108863){
        count += 5;
     }else{
        count += 6;
     }    
  }
  return count;
};
Пример использования:
var str = "Строка";
console.log('Length: ', str.byteLength(), ' byte(s)');
А можно поступить проще:
var str = "Строка";
count = unescape(encodeURIComponent(str)).length

3 комментария: