Как стать автором
Обновить

Учимся бороться с ëÒÁËÏÚÑÂÒÙ

Время на прочтение1 мин
Количество просмотров32K
Недавно у меня возникла потребность скачивать кучу всяких документов из веба. Естественно не ручками, а питонячими скриптами. Но вот беда — довольно часто странички содержат кракозябры какую-то хрень.

image



Конечно, есть же куча всяких онлайн декодеров, типа 2cyr и пр. Но это всё не то — хочется всё же иметь возможность чинить кракозябры в скриптах. Перерыл кучу мест — не нашёл ничего годного для питона. В итоге почесал репу и накидал свой велосипед. Велосипед едет медленно, но зато едет.

Получившаяся библиотека менее интеллектуальная чем 2cyr — не умеет, например, декодить такие «кракозябры»: ирилица
На самом деле данное решение умеет делать только одно — распутывать цепочки последовательных перекодировок в удобочитаемый вид. Например, если текст в кодировке CP1251 был отображён в кодировке KOI8-R, то получится примерно такая фигня: йПЮЙНГЪАПШ АКЕЮРЭ.

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

Собственно,
$ pip install recoder

или
$ git clone https://bitbucket.org/dkuryakin/recoder.git
$ cd recoder && python setup.py install


После этого можно сделать так:
$ echo йПЮЙНГЪАПШ АКЕЮРЭ | python -mrecoder utf-8  # тут указываем кодировку локали.


Пользуйтесь на здоровье, заодно может под виндой кто-нибудь потестит (:

UPD.

Немножко допилил код, теперь оно умеет почти все кейсы из примеров на 2cyr.com. Например "èðèëèöà" или "%D0%A2%D0%BE%D0%B2%D0%B0+%D0%B5+%D0%BA".
Теги:
Хабы:
Всего голосов 56: ↑40 и ↓16+24
Комментарии82

Публикации

Истории

Работа

Data Scientist
54 вакансии
Python разработчик
116 вакансий

Ближайшие события

One day offer от ВСК
Дата16 – 17 мая
Время09:00 – 18:00
Место
Онлайн
Конференция «Я.Железо»
Дата18 мая
Время14:00 – 23:59
Место
МоскваОнлайн
Антиконференция X5 Future Night
Дата30 мая
Время11:00 – 23:00
Место
Онлайн
Конференция «IT IS CONF 2024»
Дата20 июня
Время09:00 – 19:00
Место
Екатеринбург
Summer Merge
Дата28 – 30 июня
Время11:00
Место
Ульяновская область