недопустимая многобайтовая строка - игнорировать экранирование - PullRequest
0 голосов
/ 08 октября 2019

Я понимаю, что этот вопрос задавался ранее, но после долгих поисков я не нашел ответа, который удовлетворял бы моим потребностям. Решения для всех других постов по этой теме - либо закодировать специальные символы, либо удалить их полностью, поэтому я не думаю, что это дубликат.

У меня есть тонна файлов из разных источников, которые всезакодированы по-разному. Поэтому я хочу прочитать все строки «в точности так, как они есть» (не обращая внимания на экранирование), чтобы я мог правильно отобразить их после очистки данных. Как часть моего отображения, я изменяю все символы на строчные, но 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. Любой хакерский способ заставить это работать будет приемлемым.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...