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)