Я загружаю данные в R с полями произвольного текста, которые содержат множество не-ASCII/двухбайтовых символов. В зависимости от функции, которую я использую для загрузки данных, или формата, в котором данные хранятся (.csv или .xlsx), символы отображаются по-разному.
В частности, если я использую read.csv с файлом .csv или read_excel с файлом .xlsx, символы выглядят примерно так: Orientaci�n m�s.
Между тем, если я использую read_csv с файлом .csv, они выглядят так: Orientaci�n m�s
Существует ли комбинация формата файла/загрузки данных для решения этой проблемы? Или есть способ декодировать данные в любом формате после их загрузки? Я изучил множество методов, включая изменение аргументов кодирования, где это применимо, и пакет decoder, но я не могу заставить ничего работать.
Мысли?
Обновлено: В комментариях ниже я пробовал следующее:
readr::guess_encoding("file with issue.csv")
# A tibble: 2 x 2
encoding confidence
<chr> <dbl>
1 UTF-8 1
2 ISO-8859-1 0.52
readr::guess_encoding("file without issue.csv")
guess_encoding("Goal_Details.csv")
# A tibble: 2 x 2
encoding confidence
<chr> <dbl>
1 UTF-8 1
2 windows-1252 0.51
iconv(x,"ISO-8859-1","windows-1252")
x Соответствует строке/полю с проблемой, но не устраняет проблему.
Мысли?
Кодировка в большинстве случаев не зависит от формата файла. Для текстовых файлов вы должны предпочесть функции readr базовым функциям R, поскольку они гораздо лучше справляются с проблемами кодирования. Что сообщает readr::guess_encoding для вашего CSV?
@VincentZoonekynd см. правки выше.
@AEF см. правки выше.
У меня была такая же проблема, и я мог решить ее с помощью readr, см. здесь





При дальнейшем расследовании ответ заключается в том, что «�» уже расшифрован. В какой-то момент исходные символы не были декодированы, поэтому Windows по умолчанию в основном говорит: «Я не знаю, что это такое», и делает это для любого символа, отличного от ASCII.
Например, после достижения этой точки нет различия между á и ¿. Для этих типов персонажей доступны пешеходные переходы, но здесь они не сработают, так как замена должна быть на уровне языка, а это совсем другая проблема.
По сути, нужно было бы либо заменить, либо удалить «�» и запустить проверку орфографии на нескольких языках.
Обычно мне проще преобразовать файлы в согласованную кодировку (например, utf8 с помощью команды
iconv) перед их загрузкой в R.