好吧,首先要了解 R 中的某些字符如果超出标准 ASCII 字符,则必须进行转义。通常这是通过“\”字符完成的。这就是为什么在 R 中编写字符串时需要转义该字符:
a <- "\" # error
a <- "\\" # ok.
“\U”是 unicode 转义的特殊指示符。请注意,使用此转义时,字符串本身中没有斜杠或 U。它只是特定字符的快捷方式。笔记:
a <- "\U00B5"
cat(a)
# µ
grep("U",a)
# integer(0)
nchar(a)
# [1] 1
这与字符串有很大不同
a <- "\\U00B5"
cat(a)
# \U00B5
grep("U",a)
# [1] 1
nchar(a)
# [1] 6
通常,当您导入文本文件时,您会以文件使用的任何编码对非 ASCII 字符进行编码(UTF-8 或 Latin-1 是最常见的)。它们有特殊的字节来表示这些字符。文本文件具有 unicode 字符的 ASCII 转义序列是不“正常”的。这就是为什么 R 不会尝试将“\U00B5”转换为 unicode 字符,因为它假设如果您想要 unicode 字符,您将直接使用它。
重新解释 ASCII 字符值的最简单方法是使用stringi
包裹。例如
library(stringi)
a <- "\\U00B5"
stri_unescape_unicode(gsub("\\U","\\u",a, fixed=TRUE))
(唯一的问题是我们需要将“\U”转换为更常见的“\u”,以便函数正确识别转义)。您可以使用以下命令对导入的数据执行此操作
test$label <- stri_unescape_unicode(gsub("\\U","\\u",test$label, fixed=TRUE))