如何在r控制台中显示和输入中文(和其他非ASCII)字符?

it_*_*ure 9 r

我的系统:win7 ultimate 64英文版+ r-3.1(64).
这是我的sessionInfo.

> sessionInfo()
R version 3.1.0 (2014-04-10)
Platform: x86_64-w64-mingw32/x64 (64-bit)
locale:
[1] LC_COLLATE=English_United States.1252  LC_CTYPE=English_United States.1252     
LC_MONETARY=English_United States.1252 LC_NUMERIC=C      
LC_TIME=English_United States.1252    

attached base packages:
[1] stats     graphics  grDevices utils     datasets  methods   base     
Run Code Online (Sandbox Code Playgroud)

1.无法在r控制台中输入中文字符
当我在r控制台中输入中文字符时,它会变成乱码.

在此输入图像描述 在此输入图像描述

2.无法在r控制台上显示中文字符
当我在r控制台中读取数据时,中文字符变成乱码.
您可以下载数据并进行测试

read.table("r1.csv",sep=",")
Run Code Online (Sandbox Code Playgroud)

下载数据

在此输入图像描述

如果您不知道如何从我的网站获取数据,请查看图表以下载数据.

在此输入图像描述

如何设置我的电脑以在r控制台中正确显示和输入中文字符?我已经更新了中文语言包并启用了它,但问题仍然存在.

CT *_*Zhu 5

它可能没有很好的文档,但是您想使用setlocale才能使用中文。该方法也适用于许多其他语言。解决方案不是很明显,因为官方文档setlocale没有具体提到它作为解决显示问题的方法。

> print('ÊÔÊÔ') #??, meaning let's give it a shot in Chinese
[1] "ÊÔÊÔ" #won't show up correctly
> Sys.getlocale()
[1] "LC_COLLATE=English_United States.1252;LC_CTYPE=English_United States.1252;LC_MONETARY=English_United States.1252;LC_NUMERIC=C;LC_TIME=English_United States.1252"
> Sys.setlocale(category = "LC_ALL", locale = "chs") #cht for traditional Chinese, etc.
[1] "LC_COLLATE=Chinese_People's Republic of China.936;LC_CTYPE=Chinese_People's Republic of China.936;LC_MONETARY=Chinese_People's Republic of China.936;LC_NUMERIC=C;LC_TIME=Chinese_People's Republic of China.936"
> print('??')
[1] "??"
> read.table("c:/CHS.txt",sep=" ") #Chinese: the 1st record/observation
  V1   V2  V3 V4  V5   V6
1 122 ?? 122 ? 122 ?? 
Run Code Online (Sandbox Code Playgroud)

如果您只想更改显示编码,而不更改语言环境的其他方面,请使用LC_CTYPE代替LC_ALL

> Sys.setlocale(category = "LC_CTYPE", locale = "chs")
[1] "Chinese_People's Republic of China.936"
> print('??')
[1] "??"
Run Code Online (Sandbox Code Playgroud)

现在,当然这仅适用于官方R控制台。如果您使用其他 IDE,例如非常流行的 IDE RStudio,即使您没有加载中文区域设置,您也完全不需要这样做就可以输入和显示中文。

从以下评论中迁移一些有用的东西:

如果数据仍然无法正确显示,我们还应该调查文件编码的问题。如果文件被UTF-8编码,十分之一data <- read.table("you_file", sep=',', fileEncoding="UTF-8-BOM", header=TRUE)fileEncoding="UTF-8"将要编码,取决于它真正具有的编码。

但您可能希望远离,UTF-BOM因为它不推荐:UTF-8 和没有 BOM 的 UTF-8 有什么不同?