Просто строка выводится на экран нормально, но при выводе из списка или кортежа перекодирования не происходит. #!/usr/bin/python # -*- coding: koi8-r -*- a="проверка" b=["корова","Москва","слово"] print a print b
Reassign to real maintainer.
Всегда так было. Метод repr() не обязан ходить к установленной локали (которая к тому же может быть и не установлена, и установлена ошибочно) -- соответственно, не производит перекодировки ни в какую локаль. Выход один: писать hex-байты как они есть.
Не пойму смысла такого глубокого отличия в отношении к строкам в случае a и b.
print зовёт str() от объекта. Для строки это даёт верный результат, а список зовёт repr() от своего содержимого для сборки своего строкового представления. print b печаетет список. Некий объект. И что этот объект делает, и откуда у него там вообще строки, и есть ли они там, и как обрабатываются - глубоко интимное дело самого списка.
Возможно первоначально задача неточно сформулирована. Про перекодирование я ошибся. Ничего перекодировать не нужно. Я именно и хочу добиться, чтобы repr() писал "байты как они есть.", не заменяя их шестнадцатеричным символьным представлением. Но так как repr менять никото не будет, даже не знаю что сказать. Вывод у этой программы странный получается $ python z.py проверка ['\xcb\xcf\xd2\xcf\xd7\xc1', '\xed\xcf\xd3\xcb\xd7\xc1', '\xd3\xcc\xcf\xd7\xcf'] Ладно, пойдём обходным путём: for x in b: print x
Извратиться всегда можно. >>> a = ["корова","Москва","слово"] >>> a.__repr__ = lambda: "[" + ",".join(self) + "]" Traceback (most recent call last): File "<stdin>", line 1, in <module> AttributeError: 'list' object attribute '__repr__' is read-only Гм. Не всегда :)