IPython unicode bug
Давным давно в такой замечательной штуке, как IPython существует баг с юникодным вводом. Вместо хорошего и ожидаемого поведения:
>>> u'абвгд'
u'\u0430\u0431\u0432\u0433\u0434'
Этот баг подкладывает нам нехорошую бяку (системная кодировка — UTF-8):
>>> u'абвгд'
u'\xd0\xb0\xd0\xb1\xd0\xb2\xd0\xb3\xd0\xb4'
Пообсуждали мы это дело с Сергеем Кищенко недельки две тому назад, а тут у меня внезапно появилось желание исправить эту ошибку.
Краткий экскурс в исходники показал, что всё плохо — функции по нескольку экранов кода уж никак не позволяют быстро (а также сухо и комфортно) разобраться в происходящем. По-быстрому обмозговав проблему, я поискал по всем исходникам IPython’а строку stdin.encoding. В результате нашёл парочку raw_input().decode() и чудное:
source=source.encode(self.stdin_encoding)
Закомментировал эту строку, и — О, чудо! - всё заработало как надо. Быстрая проверка базовых возможностей шелла показала, что никаких новых багов не появилось. “Ура!” — воскликнул я, и баг-репорт устремился.