获取R以保持UTF-8 Codepoint表示

时间:2017-11-11 21:51:12

标签: r encoding utf-8

此问题与utf-8 package for R有关。我有一个奇怪的问题,我希望在数据集中使用表情符号来保持代码点表示(即' \ U0001f602')。我想使用' FindReplace'来自Data Combine package的函数将UTF-8编码转换为dataset of YouTube comments中的表情符号的散文描述(使用我提供的词典here)。唯一的问题是,当我保存'输出作为R中的对象由utf8_encode生成的很好的utf-8编码,我可以使用我的字典,它就消失了......

首先我要调整一下字典:

emojis$YouTube <- tolower(emojis$Codepoint)

emojis$YouTube <- gsub("u\\+","\\\\U000", emojis$YouTube)

转换为字符以便能够使用utf8_encode:

emojimovie$test <- as.character(emojimovie$textOriginal)

这很好用,提供了\ U0001f595(等)的输出,当它打印时可以与字典条目匹配。在控制台中。

utf8_encode(emojimovie$test)

但是,当我这样做时:

emojimovie$text2 <- utf8_encode(emojimovie$test)

然后:

emoemo <- FindReplace(data = emojimovie, Var = "text2", replaceData = emojis, from = "YouTube", to = "Name", exact = TRUE)

我得到了所有的NA。当我用View查看$ text2中的输出时,我没有看到\ U0001f595,我看到了实际的表情符号。我认为这就是FindReplace函数不起作用的原因 - 当它被保存到一个对象时,它只会被再次表示为表情符号并且该函数无法找到任何匹配项。然而,当我尝试gsub("\U0001f602", "lolface", emojimovie$text2)时,我实际上可以匹配和替换事物,但我不想为所有~2,000左右的表情符号做这个...我已经尝试过尽可能多的阅读尽管我可以谈论utf-8,但我无法理解为什么会这样。我很难过! :P

1 个答案:

答案 0 :(得分:1)

如上所示,您尝试将UTF-8表情符号转换为文本版本。我建议去另一个方向。像

这样的东西
emojis <- read.csv('Emoji Dictionary 2.1.csv', stringsAsFactors = FALSE)

# change U+1F469 U+200D U+1F467 to \U1F469\U200D\U1F467
escapes <- gsub("[[:space:]]*\\U\\+", "\\\\U", emojis$Codepoint)

# convert to UTF-8 using the R parser
codes <- sapply(parse(text = paste0("'", escapes, "'"),
                      keep.source = FALSE), eval)

这会将U + 1F469等文本表示转换为UTF-8字符串。然后,您可以在原始数据中搜索这些字符串。

注意:如果您使用的是Windows,请确保您拥有最新版本的R;在旧版本中,解析器会为字符串lit "\U1F469"提供错误的结果。

如果你有UTF-8并且正在尝试将它打印到屏幕上,那么utf8::utf8_encode才真正使用。