使用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
)我正确地看到了西里尔字母。
答案 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