我的系统: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控制台中正确显示和输入中文字符?我已经更新了中文语言包并启用了它,但问题仍然存在.
它可能没有很好的文档,但是您想使用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 有什么不同?