Проблема с символами, отличными от ASCII, в R

Я загружаю данные в 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 Соответствует строке/полю с проблемой, но не устраняет проблему.

Мысли?

Обычно мне проще преобразовать файлы в согласованную кодировку (например, utf8 с помощью команды iconv) перед их загрузкой в ​​R.

Vincent Zoonekynd 19.07.2019 02:32

Кодировка в большинстве случаев не зависит от формата файла. Для текстовых файлов вы должны предпочесть функции readr базовым функциям R, поскольку они гораздо лучше справляются с проблемами кодирования. Что сообщает readr::guess_encoding для вашего CSV?

AEF 19.07.2019 11:46

@VincentZoonekynd см. правки выше.

costebk08 19.07.2019 16:57

@AEF см. правки выше.

costebk08 19.07.2019 16:57

У меня была такая же проблема, и я мог решить ее с помощью readr, см. здесь

splaisan 31.08.2020 09:55
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
5
429
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

При дальнейшем расследовании ответ заключается в том, что «�» уже расшифрован. В какой-то момент исходные символы не были декодированы, поэтому Windows по умолчанию в основном говорит: «Я не знаю, что это такое», и делает это для любого символа, отличного от ASCII.

Например, после достижения этой точки нет различия между á и ¿. Для этих типов персонажей доступны пешеходные переходы, но здесь они не сработают, так как замена должна быть на уровне языка, а это совсем другая проблема.

По сути, нужно было бы либо заменить, либо удалить «�» и запустить проверку орфографии на нескольких языках.

Другие вопросы по теме