testPrefs = JSON.stringify({
'val': 10
});
var jsonfile = {};
jsonfile[key] = testPrefs;
chrome.storage.sync.set(jsonfile, function () {
console.log('Saved', key, testPrefs)
Как указано в комментариях, OCaml не имеет встроенной поддержки для какого-либо конкретного кодирования, поэтому длина равна количеству байтов.
Теперь, если вы используете кодировку Utf8 (это самый простой способ смешать ascii и CJK AFAIK), есть несколько способов вычислить этот размер.
Например, используя очень легкую библиотеку Uutf [EDIT], как указывает октахрон, это возвращает длину в скалярных значениях, а не в символах, вы должны использовать ответ октахрона.
let utf8_length s = (* returns the number of unicode scalar values *)
let decoder = Uutf.decoder ~encoding:`UTF_8 (`String s) in
let rec loop () = match Uutf.decode decoder with | `End -> () | _ -> loop () in
loop ();
Uutf.decoder_count decoder
Если вы хотите посчитать количество кластеров расширенных графем (или графических символов), вы можете использовать Uuseg
для выполнения сегментации:
let len = Uuseg_string.fold_utf_8 `Grapheme_cluster (fun x _ -> x + 1) 0
;; len "春"
1
blockquote >, преимущество которого заключается в том, что он по-прежнему точен в присутствии непредставленных символов, таких как разложенный джамо по-корейски:
;; len "\u{1112}\u{1161}\u{11AB}"
1
blockquote>, что правильный результат, так как предыдущие строки должны отображаться как
한
, даже если он записан с 3 скалярными значениями Unicode.