В последнее время у меня были проблемы с __repr__()
, format()
и кодировками. Если вывод __repr__()
должен быть закодирован или быть строкой в формате Юникод? Есть ли лучшая кодировка для результата __repr__()
в Python? То, что я хочу выводить, имеет символы, отличные от ASCII.
Я использую Python 2.x и хочу написать код, который можно легко адаптировать к Python 3. Таким образом, программа использует
# -*- coding: utf-8 -*-
from __future__ import unicode_literals, print_function # The 'Hello' literal represents a Unicode object
Вот некоторые дополнительные проблемы, которые меня беспокоят, и я ищу решение, которое их решает:
- Должна работать печать на терминал UTF-8 (у меня
sys.stdout.encoding
установлен наUTF-8
, но было бы лучше, если бы и другие дела работали тоже). - Работа с выходом в файл (закодирована в UTF-8) должна работать (в этом случае
sys.stdout.encoding
естьNone
). - Мой код для многих функций
__repr__()
в настоящее время имеет многоreturn ….encode('utf-8')
, и это тяжело. Есть ли что-нибудь надежное и легкое? - В некоторых случаях у меня даже есть уродливые звери, такие как
return ('<{}>'.format(repr(x).decode('utf-8'))).encode('utf-8')
, то есть представление объектов декодируется, помещается в строку форматирования и затем повторно кодируется. Я бы хотел избежать таких запутанных преобразований.
Что вы посоветуете, чтобы написать простые функции __repr__()
, которые хорошо относятся к этим вопросам кодирования?