Подсчет байтов UTF8 в JavaScript немного похож на JavaScript, немного оглядываясь, и вы найдете несколько библиотек (вот пример: https://github.com/mathiasbynens/utf8.js ), которые могут помочь. Я также нашел поток ( https://gist.github.com/mathiasbynens/1010324 ), полный решений специально для подсчетов байт utf8.
Вот самый маленький и самый Точная функция из этого потока:
function countUtf8Bytes(s){
var b = 0, i = 0, c
for(;c=s.charCodeAt(i++);b+=c>>11?3:c>>7?2:1);
return b
}
Примечание : я немного изменил его, чтобы подпись легче читать. Однако его еще очень компактная функция, которая может быть трудно понять для некоторых.
Вы можете проверить ее результаты с помощью этого инструмента: https://mothereff.in/byte-counter
Одна коррекция для вашего OP, строка примера, которую вы предоставили i ♥ u
, на самом деле составляет 7 байт, эта функция действительно считает это правильно.