У меня довольно большая база данных (10 000+ записей с примерно 120 vars каждый) в R. Проблема состоит в том, что около половины переменных в исходном CSV-файле были правильно закодированы в UTF-8 в то время как остальные были закодированы в ANSI (Windows-1252), но декодируются как UTF-8, что приводит к странным символам для символов, отличных от ASCII (в основном латинских), таких как é
или ó
.Смешанное кодирование в файле csv
Я не могу просто изменить кодировку файла, потому что половина ее будет декодирована с неправильным типом. Кроме того, у меня нет способа узнать, какие столбцы были закодированы правильно, а какие - нет, и все, что у меня есть, это оригинальный CSV-файл, который я пытаюсь исправить.
До сих пор я обнаружил, что простой текстовый файл может быть закодирован в UTF-8 и могут быть выведены неверно истолкованные символы (плохой Юникод). Одна библиотека, которая предоставляет такую функциональность, - ftfy для Python. Тем не менее, я использую следующий код и до сих пор, не имели успеха:
import ftfy
file = open("file.csv", "r", encoding = "UTF8")
content = file.read()
content = ftfy.fix_text(content)
Однако content
покажет точно такой же текст, чем раньше. Я считаю, что это связано с тем, как ftfy выводит кодировку содержимого.
Тем не менее, если я бегу ftfy.fix_text("Pública que cotiza en México")
он покажет правильный ответ:
>> 'Pública que cotiza en México'
Я думаю, что, возможно, способ решения этой проблемы заключается в перебирать каждого из значений (ячеек) в. csv-файл и попытаться исправить, если с ftfy, и импортировать файл обратно в R, но он кажется немного сложным
Любые предложения?
Если файл был смешанным, а вы используете UTF-8, вы получите ошибки UnicodeDecode повсюду. Это похоже на то, что символы были неправильно записаны в БД. Используйте ftfy, как было предложено. Возможно, напишите обертку вокруг модуля CSV для анализа через ftfy перед возвратом результата –