2013-11-03 83 views
0

我有一个UTF-8编码的文件test.txt,其中的值是分隔符分隔半径误差

a b c 
小 小 大 
小 大 小 
大 小 小 

我读读使用命令

Sys.setlocale("LC_CTYPE", "Chinese") 
data <- read.delim("test.txt",encoding="UTF-8") 

但是数据的数据被读出作为与输出的数据帧

[1] X.U.FEFF.a b   c   
<0 rows> (or 0-length row.names) 

我的系统是视窗7

如何正确读取数据?

+0

你可以尝试fileEncoding不编码 – hadley

回答

2

我刚试过read.csv,它工作正常。我测试了你的代码,read.delim也是可用的。

> a <- read.csv('/tmp/test.txt', sep="\t", quote="", stringsAsFactors=FALSE) 
> str(a) 
'data.frame': 3 obs. of 3 variables: 
$ a: chr "小" "小" "大" 
$ b: chr "小" "大" "小" 
$ c: chr "大" "小" "小" 
> a 
    a b c 
1 小 小 大 
2 小 大 小 
3 大 小 小 

> data <- read.delim("/tmp/test.txt", encoding="utf-8") 
> data 
    a b c 
1 小 小 大 
2 小 大 小 
3 大 小 小 

然后我想你的Sys.setlocale命令,它没有工作对我来说,这表示命令本身无效,我测试场景设置成德国之后。

# ?Sys.setlocale: 
# "Attempts to set an invalid locale are ignored. There may or may not be a warning, depending on the OS." 
> Sys.setlocale("LC_CTYPE", "Chinese") 
[1] "" 
Warning message: 
In Sys.setlocale("LC_CTYPE", "Chinese") : 
    OS reports request to set locale to "Chinese" cannot be honored 
> Sys.setlocale("LC_TIME", "de_DE") # Mac OS X, in UTF-8 
[1] "de_DE" 
> Sys.getlocale() 
[1] "en_US.UTF-8/en_US.UTF-8/en_US.UTF-8/C/de_DE/en_US.UTF-8" 

要成功场景设置成中国人,你可以试试这个(Cited From Here):

Sys.setlocale("LC_ALL","zh_CN.utf-8") 
> Sys.getlocale() 
[1] "zh_CN.utf-8/zh_CN.utf-8/zh_CN.utf-8/C/zh_CN.utf-8/en_US.UTF-8" 
+0

我使用Windows 7和Sys.setlocale( “LC_ALL” ,“zh_CN.utf-8”)告诉我消息 警告消息: 在Sys.setlocale(“LC_ALL”,“zh_CN.utf-8”)中: 操作系统报告设置区域设置为“zh_CN.utf- 8“不能被承认 我认为Windows 7有问题阅读中文字符时出错 – Michael

+0

中文是一个windows语言环境,你的回答给出了Linux语言环境 – hadley

+0

我使用的是Ubuntu 14.10,并且“chinese”,“chinese”或“zh_CN.utf-8”都没有工作。所有给'OS报告请求设置区域设置为“...”不能被尊重' – Rodrigo