在R中打印unicode字符串

out*_*ird 23 unicode r

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

在此输入图像描述

test=read.csv("test.csv")
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

\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
Run Code Online (Sandbox Code Playgroud)

我想知道如何\在这种情况下摆脱逃生标志并打印出符号.或者,如果有另一种方法在R中打印出符号

非常感谢你的帮助!

MrF*_*ick 43

好吧,首先要明白,如果R中的某些字符超出标准的ASCII字符,则必须对其进行转义.通常,这是使用"\"字符完成的.这就是你在R中写一个字符串时需要转义这个字符的原因

a <- "\" # error
a <- "\\" # ok.
Run Code Online (Sandbox Code Playgroud)

"\ U"是unicode转义的特殊指示器.请注意,使用此转义时,字符串本身没有斜杠或U. 它只是特定角色的快捷方式.注意:

a <- "\U00B5"
cat(a)
# µ
grep("U",a)
# integer(0)
nchar(a)
# [1] 1
Run Code Online (Sandbox Code Playgroud)

这与字符串非常不同

a <- "\\U00B5"
cat(a)
# \U00B5
grep("U",a)
# [1] 1
nchar(a)
# [1] 6
Run Code Online (Sandbox Code Playgroud)

通常,当您导入文本文件时,您将在文件使用的任何编码中编码非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))
Run Code Online (Sandbox Code Playgroud)

(唯一的问题是我们需要将"\ U"转换为更常见的"\ u",以便功能正确识别转义).您可以使用导入的数据执行此操作

test$label <- stri_unescape_unicode(gsub("\\U","\\u",test$label, fixed=TRUE))
Run Code Online (Sandbox Code Playgroud)