Как увидеть графическое представление кодовых точек эмодзи в R (только Windows)? - PullRequest
0 голосов
/ 23 марта 2020

У меня в кадре данных есть столбец с кодовыми точками, соответствующими эмодзи. Они выглядят примерно так:

1F1E8

Я использую библиотеку remoji , но, как вы можете видеть, мои кодовые точки не имеют \ U перед их, что необходимо для методов этой библиотеки, насколько я знаю. Пример:

#This works
message (sub_emoji ("This is silly \U1f626"))

#this does not work
message (sub_emoji ("This is silly 1f626"))

Максимум, что мне удалось сделать, - это преобразовать кодовые точки в \\U1f626, но он тоже не работает.

Спасибо за авансовый

1 Ответ

0 голосов
/ 23 марта 2020

Решением, которое я пытался, было вставить строку "\U" в начале кодовых точек, но, будучи символом \, я не смог этого сделать. Но с некоторыми «хитростями» это можно сделать: я преобразовал все кодовые точки в следующую структуру (8 шестнадцатеричных цифр): \\U000xxxxx (000, если 5 шестнадцатеричных цифр в исходной кодовой точке) \\U0000xxxx (0000, если в исходной кодовой точке 4 шестнадцатеричные цифры)

Я не углубился в их смысл ("заполняю" 0), но правда в том, что они работают одинаково Насколько я пытался:

message(sub_emoji("This is silly \U0001f626"))
This is silly ?

и

message(sub_emoji("This is silly \U1f626"))
#This is silly ?

Я «заполнил» 0, потому что я использовал функцию stri_unescape_unicode() для выхода из кодовых точек \\Uxxxxxxxx и получить желаемый результат \Uxxxxxxxx (один \), чтобы передать его в sub_emoji() И эта функция, stri_unescape_unicode(), дает этот результат (один \), только если кодовая точка имеет 8 шестнадцатеричных цифр, Я не изучал почему, я только заметил это, возиться. Я также заметил, что если u в нижнем регистре, это имеет другой эффект. Например:

#it does not work
stri_unescape_unicode("\\U1F926")
#[1] NA
#Warning message: .....

stri_unescape_unicode("\\U1F926\\U1F3FB")
#[1] NA
#Warning message: .....

#it works
stri_unescape_unicode("\\U0001F926")
#[1] "\U0001f926"
stri_unescape_unicode("\\U0001F926\\U0001F3FB")
# [1] "\U0001f926\U0001f3fb"

Полный пример:

em = stri_unescape_unicode("\\U0001f626")
message(sub_emoji(paste("This is silly", em)))
#This is silly ?

emc = stri_unescape_unicode("\\U0001F926\\U0001F3FB")
message(sub_emoji(paste("This is silly", emc)))
#This is silly ??

Обратите внимание на этот последний смайлик, у него другой цвет кожи и волос, есть эффект ZWJ Последовательность .

...