在R中打印unicode字符串

在R中打印unicode字符串,r,unicode,R,Unicode,我在.csv文件中输入了一个文本字符串,其中包括unicode符号:\U00B5g/dL。 在.csv文件以及R数据框中读取: test=read.csv("test.csv") \U00B5将产生微符号-µ。R按原样将其读入数据文件(\U00B5)。但是,当我打印字符串时,它显示为\\U00B5 g/dL 或者,手动输入代码也可以 varname <- c("a", "b", "c") labels <- c("A \U00B5 g/dL", "B \U00B5 g/dL",

我在
.csv
文件中输入了一个文本字符串,其中包括unicode符号:
\U00B5
g/dL。 在
.csv
文件以及R数据框中读取:

test=read.csv("test.csv")

\U00B5
将产生微符号-µ。R按原样将其读入数据文件(
\U00B5
)。但是,当我打印字符串时,它显示为
\\U00B5 g/dL

或者,手动输入代码也可以

varname <- c("a", "b", "c")
labels <- c("A \U00B5 g/dL", "B \U00B5 g/dL", "C \U00B5 g/dL")
df <- data.frame(varname, labels)
test <- data.frame(varname, labels)
test
#  varname   labels
#  1       a A µ g/dL
#  2       b B µ g/dL
#  3       c C µ g/dL

varname首先要了解,如果R中的某些字符超出标准ASCII字符,则必须对其进行转义。通常使用“\”字符完成此操作。这就是为什么在R中写入字符串时需要转义此字符:

a <- "\" # error
a <- "\\" # ok.
(唯一的问题是我们需要将“\U”转换为更常见的“\U”,以便函数正确识别转义)。您可以使用对导入的数据执行此操作

test$label <- stri_unescape_unicode(gsub("\\U","\\u",test$label, fixed=TRUE))

test$label当您说,但是当我打印字符串时,它显示为
\\U00B5 g/dL
。,在哪里打印字符串?在我看来,问题不在于正确打印unicode字符,而在于正确读取文件中的文字unicode文本并将其解释为unicode字符串。如果按照@RichardScriven的建议使用UTF-8对文件进行编码,则可以使用
fileEncoding=“UTF-8”,allowEscapes=T
在对
read.csv()
的调用中。如果文本文件中有“\U00B5 g/dL”,则不是Unicode。这只是一个ASCII斜杠,后跟字母和数字。我不清楚你的csv文件中到底有什么。如果您提供一个可复制的示例(具体显示文件的字节)@AlexA,那就太好了。对这就是问题所在!如果我手动输入,它可以正常工作。但是如果我从
.csv
文件导入。它将添加`\`。
a <- "\\U00B5"
cat(a)
# \U00B5
grep("U",a)
# [1] 1
nchar(a)
# [1] 6
library(stringi)
a <- "\\U00B5"
stri_unescape_unicode(gsub("\\U","\\u",a, fixed=TRUE))
test$label <- stri_unescape_unicode(gsub("\\U","\\u",test$label, fixed=TRUE))