R在Windows上:字符编码地狱

前端之家收集整理的这篇文章主要介绍了R在Windows上:字符编码地狱前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我试图在Windows上将一个编码为OEM-866(Cyrillic charset)的CSV导入到R中。我也有一个已经被转换成UTF-8的副本的副本。一旦指定了编码,这两个文件都可以在系统上的所有其他应用程序读取。

此外,在Linux上,R可以使用指定的编码读取这些特定的文件。我也可以在Windows上阅读CSV,如果我没有指定“fileEncoding”参数,但这会导致无法读取的文本。当我在Windows上指定文件编码时,对于OEM和Unicode文件,我总是收到以下错误

原始OEM文件导入:

> oem.csv <- read.table("~/csv1.csv",sep=";",dec=",",quote="",fileEncoding="cp866")   #result:  failure to import all rows
Warning messages:
1: In scan(file,what,nmax,sep,dec,quote,skip,nlines,na.strings,:
  invalid input found on input connection '~/Revolution/RProject1/csv1.csv'
2: In scan(file,:
  number of items read is not a multiple of the number of columns

UTF-8 w / o BOM文件导入:

> unicode.csv <- read.table("~/csv1a.csv",fileEncoding="UTF-8") #result:    failure to import all row
Warning messages:
1: In scan(file,:
  invalid input found on input connection '~/Revolution/RProject1/csv1a.csv'
2: In scan(file,:
  number of items read is not a multiple of the number of columns

区域信息:

> 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"

在Windows上有什么关于这个的负责?在这一点上,我几乎尝试了一切,除了打开窗户。

谢谢

(其他尝试失败):

>Sys.setlocale("LC_ALL","en_US.UTF-8") #OS reports request to set locale to "en_US.UTF-8" cannot be honored
>options(encoding="UTF-8") #now nothing can be imported  
> noarg.unicode.csv <- read.table("~/Revolution/RProject1/csv1a.csv",quote="")   #result: mangled cyrillic
> encarg.unicode.csv <- read.table("~/Revolution/RProject1/csv1a.csv",encoding="UTF-8") #result: mangled cyrillic
通过将fileEncoding更改为编码可以解决您的问题,这些参数在读取功能中的工作方式不同(请参阅?read)。
oem.csv <- read.table("~/csv1.csv",encoding="cp866")

不过,如果有一个更完整的答案,可能会有一些不明显的障碍。简而言之:可以在Windows上使用Cyrillic(在我的情况下为Win 7)。

您可能需要尝试一些可能的编码才能使工作正常。对于文本挖掘,一个重要的方面是获取输入变量来匹配数据。 Encoding()的功能非常有用,参见iconv()。因此,可以看到您的本机参数。

Encoding(variant <- "Минемум")

在我的情况下,编码是UTF-8,尽管这可能取决于系统设置。所以,我们可以使用UTF-8和UTF-8-BOM来测试结果,并在记事本中使用一行拉丁语和一条西里尔字样制作一个测试文件

UTF8_nobom_cyrillic.csv& UTF8_bom_cyrillic.csv

part2,part3,part4
Минемум конкыптам,тхэопхражтуз,ед про

这可以导入到R中

raw_table1 <- read.csv("UTF8_nobom_cyrillic.csv",header = FALSE,sep = ",quote = "\"",dec = ".",fill = TRUE,comment.char = "",encoding = "UTF-8")
raw_table2 <- read.csv("UTF8_bom_cyrillic.csv",encoding = "UTF-8-BOM")

这些结果是为我的BOM常规西里尔字体(raw_table1)和控制台中的乱码。

part2,part4
ŠŠøŠ½ŠµŠ¼ŃŠ¼ ŠŗŠ¾Š½ŠŗŃ‹ŠæŃ‚Š°Š¼ тхѨŠ¾ŠæŃ…Ń€Š°Š¶Ń‚ŃŠ

然而,更重要的是,脚本不允许访问它。

> grep("Минемум",as.character(raw_table2[2,1]))
integer(0)

没有BOM UTF-8的结果对于view(raw_table1)和控制台都是这样的。

part2,part4
<U+041C><U+0438><U+043D><U+0435><U+043C><U+0443><U+043C> <U+043A><U+043E><U+043D><U+043A><U+044B><U+043F><U+0442><U+0430><U+043C> <U+0442><U+0445><U+044D><U+043E><U+043F><U+0445><U+0440><U+0430><U+0436><U+0442><U+0443><U+0437> <U+0435><U+0434> <U+043F><U+0440><U+043E>

然而,重要的是,搜索内容将产生正确的结果。

> grep("Минемум",as.character(raw_table1[2,1]))
1

因此,有可能在Windows中使用非标准字符,这取决于您的确切目标。
我经常使用非英语拉丁字符,UTF-8允许在Windows 7中工作,没有任何问题。 “WINDOWS-1252”对于导出到Excel等Microsoft读者来说非常有用。

PS俄语词在这里生成http://generator.lorem-ipsum.info/_russian,所以基本上没有意义。PPS你提到的警告仍然没有明显的重要影响。

猜你在找的Windows相关文章