在R中处理非英文名称的文件

时间:2014-06-22 18:30:14

标签: r utf-8 character-encoding internationalization cyrillic

使用R功能操作Windows中的文件时,例如dir(),那些非英文字符,如西里尔字母,被表示为“?”序列。

类似地,当使用file.rename()时,如果新名称包含非英文字符,则使用不可读的字符重命名该文件,显然映射到不同的编码。

有许多函数处理文件内容的编码,但是我们如何处理文件名呢?

重现问题:
外部R在工作目录中创建文件“привет.txt”;然后在R:

dir() 
# [1] "??????.txt"      
# ...

请注意设置:

Sys.setlocale(category = "LC_ALL", locale="Russian")

无济于事。

注意:我正在使用R 3.1.2 for Windows,Windows 8.1 in English 和Windows控制台(cmd.exe)我正确地看到了西里尔字母。

2 个答案:

答案 0 :(得分:3)

如果您只想运行一次或两次脚本并了解目标语言,一个简单的解决方案就是更改位置。

Sys.setlocale(category = "LC_ALL", locale="Russian") 
x1<-read.table("C:\\привет.txt",head=TRUE)  #work just fine with R_3.1.2
Sys.setlocale(category = "LC_ALL", locale="English") 
x2<-read.table("C:\\привет.txt",head=TRUE)  #will present error

如果您想从服务器读取,我强烈建议您使用Python或其他脚本语言来处理Unicode路径。如果你坚持,我会说: (c.f。Set locale to system default UTF-8

Sys.setlocale(category = "LC_ALL", locale = "English_United States.1252")
x3<-read.table("C:\\привет.txt",head=TRUE)  #will present warning or not, but successfully read a table into x3

但是,您仍应使用某个包(例如stringi)处理此表的内容,并在必要时记得在此读取操作后还原位置。

==更新==

(c.f。https://stat.ethz.ch/pipermail/r-help/2011-May/278206.html) 根据R-FAQ文件,这也可能是一个不一致的问题:

  

3.6我在R控制台上看不到带重音的字符,例如在文本中。

     

您需要在Rconsole中指定一个支持的字体(参见Q5.2)   编码在使用中。这曾经是早期版本中的一个问题   Windows,但现在很难找到没有的字体。

     

在Rterm中支持这些字符取决于环境   (终端窗口和shell,包括语言环境和代码页   它运行的设置)以及使用的字体   终端窗口。这些通常是在传统的DOS设置和需要   改变。

考虑到这一点,请告诉我你是否可以使用'read'在R-console中输入俄文文件名。感谢。

答案 1 :(得分:2)

试试这个:iconv("привет.txt","UTF-8","CP1251")

在编码之间转换字符向量:
https://stat.ethz.ch/R-manual/R-devel/library/base/html/iconv.html

iconv库:
http://www.delorie.com/gnu/docs/recode/recode_30.html