我试图在由字符串组成的数据框中识别唯一的unicode值。我尝试过使用grep函数,但遇到以下错误
Error: '\U' used without hex digits in character string starting ""\U"
示例数据框
time sender message
1 2012-12-04 13:40:00 1 Hello handsome!
2 2012-12-04 13:40:08 1 \U0001f618
3 2012-12-04 14:39:24 1 \U0001f603
4 2012-12-04 16:04:25 2 <image omitted>
73 2012-12-05 06:02:17 1 Haha not white and blue... White with blue eyes \U0001f61c
40619 2015-05-08 10:00:58 1 \U0001f631\U0001f637
grep("\U", dat$messages)
数据
dat <-
structure(list(time = c("2012-12-04 13:40:00", "2012-12-04 13:40:08",
"2012-12-04 14:39:24", "2012-12-04 16:04:25", "2012-12-05 06:02:17",
"2015-05-08 10:00:58"), sender = c(1L, 1L, 1L, 2L, 1L, 1L), message = c("Hello handsome!",
"\U0001f618", "\U0001f603", "<image omitted>", "Haha not white and blue... White with blue eyes \U0001f61c",
"\U0001f631\U0001f637")), .Names = c("time", "sender", "message"
), class = "data.frame", row.names = c("1", "2", "3", "4", "73",
"40619"))
答案 0 :(得分:5)
我假设“unicode character”你只是指非ASCII字符。根据编码,字符代码可能意味着不同的东西。 R表示具有特殊\U
序列的当前编码之外的值。请注意,斜杠和字母“U”实际上都不会出现在实际数据中。这就是当适当的字形不可用时,如何将它们转义为在屏幕上打印。
例如,即使最后一条消息看起来很长,但它实际上只有两个字符长
dat$message[6]
# [1] "\U0001f631\U0001f637"
nchar(dat$message[6])
# [1] 2
您可以非常轻松地使用正则表达式查找非ASCII代码。 ASCII字符都有代码0-128(或八进制000到177)。您可以使用
查找该范围之外的值grep("[^\001-\177]", dat$message)
# [1] 2 3 5 6
答案 1 :(得分:4)
尝试:
library(stringi)
stri_enc_isascii(dat$message)
给出了:
# [1] TRUE FALSE FALSE TRUE FALSE FALSE