Я понимаю, что этот вопрос задавался ранее, но после долгих поисков я не нашел ответа, который удовлетворял бы моим потребностям. Решения для всех других постов по этой теме - либо закодировать специальные символы, либо удалить их полностью, поэтому я не думаю, что это дубликат.
У меня есть тонна файлов из разных источников, которые всезакодированы по-разному. Поэтому я хочу прочитать все строки «в точности так, как они есть» (не обращая внимания на экранирование), чтобы я мог правильно отобразить их после очистки данных. Как часть моего отображения, я изменяю все символы на строчные, но tolower
не работает с escape-символами.
Пример ошибки:
tolower("ThIs d\xf6ESn't W\xf6Rk")
>>> Error in tolower("ThIs d\xf6ESn't W\xf6Rk") : invalid multibyte string 1
Я понимаю, что могу изменить кодировку, чтобы избавиться от ошибки, но, как я уже говорил, я не хочу преобразовывать символы, потому чтонет кодировки, которая могла бы работать для всех источников. Мне нужно, чтобы строки читались как есть.
EG это недопустимо:
tolower(iconv("ThIs d\xf6ESn't W\xf6Rk", "WINDOWS-1252", "UTF-8"))
>>> "this döesn't wörk"
Или, может быть, это приемлемо, если есть простой способ изменить "ö" обратно наa "\ xf6".
В конце дня я хочу вот что:
NEWtolower("ThIs d\xf6ESn't W\xf6Rk")
>>> "this d\xf6esn't w\xf6rk"
Есть ли простой способ игнорировать побег? Как хак, я думал о воссоздании строки, циклически проходя по каждому символу, поворачиваясь к нижнему регистру, а затем снова собирая символы вместе. Но даже nchar("ThIs d\xf6ESn't W\xf6Rk")
дает мне ошибку, поэтому я действительно не знаю, что делать.
Должен быть простой способ просто игнорировать побеги, верно? read.csv()
имеет опцию allowEscapes = TRUE
. Любой хакерский способ заставить это работать будет приемлемым.