Как найти "реальное" количество символов в строке Unicode в R

Я знаю, как найти длину строки не Unicode в R.

nchar("ABC")

(спасибо всем, кто ответил на этот вопрос здесь: Как найти длину строки в R?).

Но как насчет строк Unicode?

Как найти длину строки (количество символов в строке) в строках Unicode? Как найти длину (в байтах) и количество символов (руны, символы) в строке Unicode в R?

Ответ 1

Вы можете использовать nchar для числа characters и для числа bytes:

nchar("bi\u00dfchen", type="chars")
#[1] 7
nchar("bi\u00dfchen", type="bytes")
#[1] 8

В самом деле, в справке вы можете найти информацию о том, как вычислить размер строки:

Размер символьной строки можно измерить одним из трех способов (в соответствии с аргументом типа):
байт
Количество байтов, необходимых для хранения строки (плюс в C конечный терминатор, который не учитывается). символы
Число человекочитаемых персонажей.
ширина
Количество столбцов cat будет использоваться для печати строки в моноширинном шрифте. То же, что и символы, если это невозможно вычислить.

Если вы хотите узнать количество "символов" внутри строки, которая может содержать (или не указывать) юникод (т.е. без интерпретации символа юникода), вы можете использовать функцию stri_escape_unicode из пакета stringi:

library(stringi)
nchar(stri_escape_unicode("bi\u00dfchen")) # same as stri_length(stri_escape_unicode("bi\u00dfchen"))
# [1] 12