Основываясь на решении 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)
Подсчет байтов 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 байт, эта функция действительно считает это правильно.
По состоянию на 2018 год наиболее совместимый и надежный способ сделать это, похоже, связан с blob api.
new Blob([str]).size
Даже поддерживается в IE10 , если кто-либо использует это больше .
Экспериментальный 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.