Мне потребовалась функция подсчета количества байтов в строке (в 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
спасибо, очень полезно )
ОтветитьУдалитьОтличная функция, спасибо автору.
ОтветитьУдалитьБлагодарочка, спасибо за полезность :)
ОтветитьУдалить