R:即使在指定编码时也无法读取unicode文本文件

s_a*_*s_a 6 windows unicode encoding r ucs2

我在Windows 7 32位上使用R 3.1.1.我在阅读一些我想要进行文本分析的文本文件时遇到了很多问题.根据Notepad ++,文件使用"UCS-2 Little Endian"编码.(grepWin,一个名字说明这一切的工具,说该文件是"Unicode".)

问题是我甚至无法读取文件甚至指定编码.(这些字符属于标准的西班牙语拉丁语-ñáó-,应该可以使用CP1252或类似的东西轻松处理.)

> Sys.getlocale()
[1] "LC_COLLATE=Spanish_Spain.1252;LC_CTYPE=Spanish_Spain.1252;LC_MONETARY=Spanish_Spain.1252;LC_NUMERIC=C;LC_TIME=Spanish_Spain.1252"
> readLines("filename.txt")
 [1] "ÿþE" ""    ""    ""    ""   ...
> readLines("filename.txt",encoding="UTF-8")
 [1] "\xff\xfeE" ""          ""          ""          ""    ...
> readLines("filename.txt",encoding="UCS2LE")
 [1] "ÿþE" ""    ""    ""    ""    ""    ""     ...
> readLines("filename.txt",encoding="UCS2")
 [1] "ÿþE" ""    ""    ""    ""    ...
Run Code Online (Sandbox Code Playgroud)

有任何想法吗?

谢谢!!


编辑:"UTF-16","UTF-16LE"和"UTF-16BE"encondings同样失败

s_a*_*s_a 7

在仔细阅读文档之后,我找到了问题的答案.

encoding参数readLines仅适用于param输入字符串.文件说:

输入字符串的编码.它用于标记已知为Latin-1或UTF-8的字符串:它不用于重新编码输入.要执行后者,请将编码指定为连接con或via选项(encoding =)的一部分:请参阅示例.另请参阅"详细信息".

那么,使用不常见的编码读取文件的正确方法是:

filetext <- readLines(con <- file("UnicodeFile.txt", encoding = "UCS-2LE"))
close(con)
Run Code Online (Sandbox Code Playgroud)

  • 谢谢这对我有用.我使用:`hht9aa < - read.csv(file("hht9aa_aa.txt",encoding ="UCS-2LE"))`最后让它正确读取UTF-16 Little Endian文件.但是我没有关闭(con),事实上当我这样做时我遇到了错误,并最终将其删除了. (2认同)