0

我在数据框中有一列代码点对应于表情符号。它们看起来像这样:

1F1E8

我正在使用remoji库,但正如您所见,我的代码点前面没有\U,据我所知,这是该库的方法所必需的。例子:

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

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

我设法做的最多是将代码点转换为,\\U1f626但它也不起作用。

提前致谢

4

1 回答 1

0

我尝试的解决方案是将字符串粘贴到"\U"代码点的开头,但作为\转义字符我做不到。但是通过一些“技巧”可以做到:我将所有代码点转换为以下结构(8 个十六进制数字):( \\U000xxxxx如果原始代码点中有 5 个十六进制数字,则为 000) \\U0000xxxx(如果原始代码点中有 4 个十六进制数字,则为 0000 )

我没有深入研究它们的含义(“填充”为 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() 此函数,仅在代码点有 8 个十六进制数字stri_unescape_unicode()时才给出此结果(一) \,我没有研究为什么,我只是通过乱搞才注意到这一点。我还注意到,如果它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序列的效果。

于 2020-03-23T06:29:22.147 回答