22 апреля 2008

Пугливый питон

File "/usr/lib/python2.5/encodings/koi8_r.py", line 12, in encode
return codecs.charmap_encode(input,errors,encoding_table)
UnicodeEncodeError: 'charmap' codec can't encode character u'\u2013' in position 19: character maps to

Знакомо? А всё потому, что какой-то имбецил решил, будто мне, как пользователю, будет очень приятно, если программа, автор которой не подозревает о существовании кодировок, отличных от utf8, будет валиться из-за того, что стандартный модуль написан по принципу юнит-теста "Fail first".
А вот ежели заменить в этом пресловутом koi8_r.py errors на 'ignore' (то есть независимо от того, как предполагает это делать разработчик, игнорировать все ошибки), то всё работает (грязный хак, ибо накипело). "Выполняется любой ценой", что и есть, мать их, правильное поведение для пользовательского приложения.
Вот представим себе ушастого, вчера оторвавшегося от подола матушки-винды, пользователя. Запускает он программу, а там такое. Плюнул, ушёл. Или полез докапываться до истины, написал разработчику. Тот ни в зуб ногой, типа моя твоя не понимайт. И он таки прав, у него такая ситуация принципиально не возникает, потому что он, например, говорит на iso-8859-1. Плюнул, ушёл.
Ненавижуидиотов.

4 комментария:

semka комментирует...

Когда я впервый раз столкнулся с питоном --- это была первая проблема.
Нихуя не меняется.

Deepwalker комментирует...

А при чем тут казалось бы сам питон?

В принципе в py3k везде будет юникод, и проблема решится сама собой.

Reitetsu комментирует...

Может, стоит потрясти разработчиков на эту тему?

PhoeniX комментирует...

Deepwalker Там уже и так "везде юникод", развесистый, что клюква, а толку-то?
semka Меняется. Мозолистыми трудовыми руками. И затирается следующим апдейтом. Пойду, внесу его в package.mask
Reitetsu Потрясите, отчего ж не потрясти.