R: не может читать текстовые файлы в юникоде даже при указании кодировки

Я использую R 3.1.1 на Windows 7 32bit. У меня много проблем с чтением текстовых файлов, для которых я хочу выполнить анализ текста. Согласно 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" завершаются неудачно аналогично

1 ответ

Решение

После более внимательного прочтения документации я нашел ответ на свой вопрос.

encoding параметр readLines применяется только к входным строкам параметров. В документации сказано:

кодировка для входных строк. Он используется для маркировки символьных строк, как известно, в Latin-1 или UTF-8: он не используется для перекодирования ввода. Чтобы выполнить последнее, укажите кодировку как часть соединения con или с помощью параметров (encoding=): см. Примеры. Смотрите также "Детали".

Таким образом, правильный способ чтения файла с необычной кодировкой

filetext <- readLines(con <- file("UnicodeFile.txt", encoding = "UCS-2LE"))
close(con)
Другие вопросы по тегам