如何在 R 中以 UTF-8 格式读取数据?

14

我的系统:win7+R-3.0.2。

> Sys.getlocale()
[1] "LC_COLLATE=Chinese (Simplified)_People's Republic of China.936;LC_CTYPE=Chinese 
(Simplified)_People's Republic of China.936;LC_MONETARY=Chinese (Simplified)_People's        
republic of China.936;LC_NUMERIC=C;LC_TIME=Chinese (Simplified)_People's Republic of China.936"

在微软记事本中保存了两个内容相同的文件:一个以ansi格式保存,另一个以utf8格式保存。数据是马来西亚航空公司M370航班的死亡名单。

或者您可以按照以下方式创建文件:

1)将数据复制到微软记事本中。

乘客姓名,性别,出生日期
HuangTianhui,男,1948/05/28
姜翠云,女,1952/03/27
李红晶,女,1994/12/09

2) 使用记事本将文件保存为 test.ansi,并选择ANSI格式。
3) 使用记事本将文件保存为 test.utf8,并选择UTF-8格式。

read.table("test.ansi",sep=",",header=TRUE)  #can work fine
read.table("test.utf8",sep=",",header=TRUE)  #can't work

然后,我将编码设置为utf-8。
options(encoding="utf-8")
read.table("test.utf8",sep=",",header=TRUE,encoding="utf-8")


 In read.table("test.utf8", sep = ",",header=TRUE,encoding = "utf-8") :
invalid input found on input connection 'test.utf8'

我该如何读取数据文件(test.utf8)?在Python中,这非常简单。
rfile=open("g:\\test.utf8","r",encoding="utf-8").read()
rfile
'\ufeff乘客姓名,性别,出生日期\n\nHuangTianhui,男,1948/05/28\n\n姜翠云,女,1952/03
/27\n\n李红晶,女,1994/12/09'
rfile.replace("\n\n","\n").replace("\ufeff","").splitlines()
['乘客姓名,性别,出生日期', 'HuangTianhui,男,1948/05/28', '姜翠云,女,1952/03/27',
 '李红晶,女,1994/12/09']

Python在处理此类任务方面比R更好。

我按照Sathish的建议做了,问题有所解决,但仍然存在一些问题。
我发现当数据在data.frame中时,无法正确显示,
但是当数据是data.frame的一列时,可以正确显示,
奇怪的是,当数据是data.frame的一行时,也无法正确显示。

图片描述

图片描述


最好在此处提供一个最小化、可重现的示例,而不是链接到外部网站。我试图获取您的UTF-8数据,但很快就被您发送给我的网站的弹窗和速度所厌烦了。 - jbaums
Microsoft Agenda是什么?你是指Excel吗? - jbaums
尝试使用大写字母来编码字符串:read.table("test.utf8", sep=",", header=TRUE, encoding="UTF-8") - jbaums
%windir%\system32\notepad.exe - showkey
问题仍然存在,让我感觉R的编码肯定有bug,请查看我的编辑文本,随着您的探索,漏洞变得更加深入。 - showkey
显示剩余2条评论
1个回答

2

尝试使用 fileEncoding 参数来读取不同编码的文件:

 read.table("test.utf8", sep = "," , header=TRUE, fileEncoding = "UTF-8")

我尝试了一下,但无法工作。也许与我的区域设置有关,我的区域设置是"LC_COLLATE=Chinese (Simplified)_People's Republic of China.936;LC_CTYPE=Chinese (Simplified)_People's Republic of China.936;LC_MONETARY=Chinese (Simplified)_People's republic of China.936;LC_NUMERIC=C;LC_TIME=Chinese (Simplified)_People's Republic of China.936"。如果您已经打开它,那么您的区域设置是什么?我该如何将其更改为您的区域设置? - showkey

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接