7

我在 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" ""    ""    ""    ""    ...

有任何想法吗?

谢谢!!


编辑:“UTF-16”、“UTF-16LE”和“UTF-16BE”编码同样失败

4

1 回答 1

15

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

encoding参数readLines仅适用于参数输入字符串。文档说:

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

那么,读取具有不常见编码的文件的正确方法是,

filetext <- readLines(con <- file("UnicodeFile.txt", encoding = "UCS-2LE"))
close(con)
于 2014-10-14T13:09:56.317 回答