Редактор summernote хочет сделать подсчет байтов [duplicate]

Основываясь на решении daroczig, если вы не хотите указывать список в качестве ввода, вы можете использовать

# Foo
mLoad <- function(...) {
  sapply(sapply(match.call(), as.character)[-1], require, character.only = TRUE)
}

# Example 
mLoad(plyr, dplyr, data.table)

... который короче

lapply(list('plyr', 'dplyr', 'data.table'), require, character.only = TRUE)
4
задан k00989 23 September 2014 в 12:31
поделиться

3 ответа

Подсчет байтов 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 байт, эта функция действительно считает это правильно.

1
ответ дан klyd 25 August 2018 в 05:48
поделиться

По состоянию на 2018 год наиболее совместимый и надежный способ сделать это, похоже, связан с blob api.

new Blob([str]).size

Даже поддерживается в IE10 , если кто-либо использует это больше .

5
ответ дан ayanami 25 August 2018 в 05:48
поделиться

Экспериментальный API TextEncoder может быть использован для этого, но не поддерживается Internet Explorer или Safari:

(new TextEncoder()).encode("i ♥ u i ♥ u i ♥ u i ♥ u i ♥ u").length;

Другой альтернативой является URI-кодирование строки и подсчет символы и% -кодированные escape-последовательности, как в этой библиотеке :

~-encodeURI("i ♥ u i ♥ u i ♥ u i ♥ u i ♥ u").split(/%..|./).length

На странице github есть список совместимости, который, к сожалению, не содержит IE10, но IE9.

Так как я еще не могу прокомментировать, я также должен отметить, что решение в принятом ответе не работает для кодовых точек, состоящих из нескольких кодовых блоков UTF-16.

1
ответ дан boomlinde 25 August 2018 в 05:48
поделиться
Другие вопросы по тегам:

Похожие вопросы: