在R中打印unicode字符串

时间:2015-03-25 19:48:57

标签: r unicode

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

enter image description here

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

enter image description here

\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

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

非常感谢你的帮助!

1 个答案:

答案 0 :(得分:41)

嗯,首先要了解如果R中的某些字符超出标准ASCII字符,则必须对其进行转义。通常,这是通过&#34; \&#34;字符。这就是你在R:

中写一个字符串时需要转义这个字符的原因
a <- "\" # error
a <- "\\" # ok.

&#34; \ U&#34;是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

通常,当您导入文本文件时,您将对文件使用的任何编码(UTF-8或Latin-1是最常见的)编码非ASCII字符。它们具有表示这些字符的特殊字节。它没有&#34;正常&#34;使文本文件具有unicode字符的ASCII转义序列。这就是为什么R没有尝试转换&#34; \ U00B5&#34;到一个unicode字符,因为它假定如果你想要一个unicode字符,你就可以直接使用它。

重新插入ASCII字符值的最简单方法是使用stringi包。例如

library(stringi)
a <- "\\U00B5"
stri_unescape_unicode(gsub("\\U","\\u",a, fixed=TRUE))

(唯一的问题是我们需要将&#34; \ U&#34;转换为更常见的&#34; \ u&#34;因此该功能正确识别了转义)。您可以使用

对导入的数据执行此操作
test$label <- stri_unescape_unicode(gsub("\\U","\\u",test$label, fixed=TRUE))