我的系统: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
1.r控制台无法输入汉字
当我在 r 控制台中输入一个汉字时,它变成了乱码。
2.r控制台无法显示汉字
当我在 r 控制台中读取数据时,汉字变成了乱码。
您可以下载数据,并使用
read.table("r1.csv",sep=",")
Download Data
如果您不知道如何从我的网站获取数据,请参阅图表以下载数据。
如何设置我的电脑以在 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 记录
如果您只想更改显示编码,而不更改区域设置的其他方面,请使用
LC_CTYPE
而不是 LC_ALL
:> Sys.setlocale(category = "LC_CTYPE", locale = "chs")
[1] "Chinese_People's Republic of China.936"
> print('试试')
[1] "试试"
现在,当然这仅适用于官方
R
安慰。如果您使用其他 IDE,例如非常流行的 RStudio
,即使您没有加载中文区域设置,您也完全不需要执行此操作即可键入和显示中文。从以下评论中迁移一些有用的东西:
如果数据仍然无法正确显示,我们还应该调查文件编码的问题。如果文件是
UTF-8
编码,十分之一 data <- read.table("you_file", sep=',', fileEncoding="UTF-8-BOM", header=TRUE)
或 fileEncoding="UTF-8"
会做,取决于它真的有哪种编码。但你可能想远离
UTF-BOM
因为不推荐:What's different between UTF-8 and UTF-8 without BOM?
关于r - 如何在 r 控制台中显示和输入中文(和其他非 ASCII)字符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24473681/