Summary: | Не перекодирует строки из списков при выводе в консоль | ||
---|---|---|---|
Product: | Sisyphus | Reporter: | Vitaly Lipatov <lav> |
Component: | python-base | Assignee: | Fr. Br. George <george> |
Status: | CLOSED WONTFIX | QA Contact: | qa-sisyphus |
Severity: | normal | ||
Priority: | P2 | CC: | vseleznv |
Version: | unstable | ||
Hardware: | all | ||
OS: | Linux |
Description
Vitaly Lipatov
2005-10-29 15:52:08 MSD
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
Гм. Не всегда :)
|