Решением, которое я пытался, было вставить строку "\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 Последовательность .