R如何将<u + 9600> <u + 524d>等UTF-8代码转换回中文字符

时间:2017-05-21 09:02:33

标签: r encoding utf-8

当我使用read.csv来读取包含带有选项encoding = "UTF-8"的中文字符的文件时,我会得到这些神秘的代码。

通过一点比较,我意识到他们可以一对一匹配汉字,但是如何将它们转换回R中的汉字。

例如,<U+9600><U+524D>分别为"阀""前"

1 个答案:

答案 0 :(得分:1)

您需要更改区域设置以获取中文字符,以便进行更换:

x <- "阀"
print(x) will result in ##[1] "<U+9600>"

将对象中的区域设置保存为备份,以便我们可以像之前一样撤消区域设置

oldloc <- Sys.getlocale("LC_CTYPE")

通过输入&#34; en_US.UTF-8 &#34;更改区域设置作为第二个论点:

Sys.setlocale("LC_CTYPE", "en_US.UTF-8")
print(x) ###The result is now [1] "阀"

你也可以尝试语言环境zh_CN.UTF-‌​8,它也适合我。如果您搞砸了任何东西,那么您可以使用下面的内容来达到以前的状态:

Sys.setlocate("LC_CYTPE",oldloc)

我刚刚意识到OP正在使用Windows机器的评论,上面的命令对我的Mac sierra非常有用,但在Windows 7机器上产生如下警告:

Warning message:
In Sys.setlocale("LC_CTYPE", "en_US.UTF-8") :
  OS reports request to set locale to "en_US.UTF-8" cannot be honored

但是,为了解决Windows上的上述问题,我使用了下面的stringi函数stri_trans_general,这解决了问题并打印了所需的汉字

stringi::stri_trans_general(x, "zh")

<强>输出

> stringi::stri_trans_general(x, "zh")
[1] "阀"

您可以访问here查看不同地区的区域设置。