Как сохранить кадр данных в виде файла .csv с кодировкой UTF-8 и строкой LF, заканчивающейся на R, с помощью Rstudio?

Столкнулся с такой странной ситуацией:

Мне нужно сохранить кадр данных в файл .csv UTF-8 и с окончанием LF. Я использую последнюю версию R и Rstudio на компьютере с Windows 10.

Моя первая попытка состояла в том, чтобы сделать наивно:

write.csv(df, fileEncoding="UTF-8", eol="\n")

при проверке с помощью Notepad ++ выясняется, что кодировка - UTF-8, однако окончание строки - CRLF, а не LF. Хорошо, давайте еще раз проверим с помощью Блокнота: сюрприз, сюрприз, кодировка, согласно Блокноту, ANSI. В этот момент я в замешательстве.

После просмотра документации по функции write.csv Я прочитал это:

Файлы CSV не записывают кодировку

Я не эксперт в этой теме, поэтому я решил вернуться назад и сохранить файл как простой .txt, используя write.table следующим образом:

write.table(df, fileEncoding="UTF-8", eol="\n")

снова тот же результат, что и выше. Никаких изменений. Я пробовал комбинации

write.csv(df)
write.table(df)

без указанных кодировок, но без изменений. Затем я установил кодировку по умолчанию в Rstudio на UTF-8 и окончание строки LF (как на картинке ниже).

введите здесь описание изображения

и снова провел тесты. Без изменений. Что мне не хватает??


person mickkk    schedule 20.01.2018    source источник


Ответы (1)


Это странно, по крайней мере для меня. Тем не менее, прочитав документы написать .table Я нашел решение. По-видимому, в Windows для сохранения файлов в стиле Unix вам необходимо открыть двоичное соединение с файлом, а затем сохранить файл, используя нужный eol:

f <- file("filename.csv", "wb")
write.csv(df, file=f, eol="\n")
close(f)

Что касается формата UTF-8, глобальные настройки должны работать нормально.

Убедитесь, что eol — это LF, используя Notepad++. UTF-8 проверить сложнее, так как в Linux isutf8 (от moreutils) говорит, что файлы действительно UTF-8, но Блокнот Windows не соглашается при сохранении и говорит, что они ANSI.

person mickkk    schedule 24.01.2018