| 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
Гм. Не всегда :)
|