¿El mejor tipo de salida y prácticas de codificación para las funciones __repr __ ()?
Últimamente he tenido muchos problemas con__repr__()
, format()
y codificaciones.Debe la salida de__repr__()
estar codificado o ser una cadena unicode? ¿Existe una mejor codificación para el resultado de__repr__()
en Python? Lo que quiero generar tiene caracteres no ASCII.
Uso Python 2.x, y quiero escribir código que pueda adaptarse fácilmente a Python 3. El programa utiliza
# -*- coding: utf-8 -*-
from __future__ import unicode_literals, print_function # The 'Hello' literal represents a Unicode object
Aquí hay algunos problemas adicionales que me han estado molestando, y estoy buscando una solución que los resuelva:
La impresión en un terminal UTF-8 debería funcionar (tengosys.stdout.encoding
ajustado aUTF-8
, pero sería mejor si otros casos funcionaran también).La canalización de la salida a un archivo (codificado en UTF-8) debería funcionar (en este caso,sys.stdout.encoding
esNone
)Mi código para muchos__repr__()
actualmente tiene muchas funcionesreturn ….encode('utf-8')
Y eso es pesado. ¿Hay algo robusto y más ligero?En algunos casos, incluso tengo bestias feas comoreturn ('<{}>'.format(repr(x).decode('utf-8'))).encode('utf-8')
, es decir, la representación de los objetos se decodifica, se coloca en una cadena de formato y luego se vuelve a codificar. Me gustaría evitar tales transformaciones enrevesadas.¿Qué recomendarías hacer para escribir de manera simple?__repr__()
funciones que se comportan bien con respecto a estas preguntas de codificación?