print
ción de cadenas Unicode se basa en sys.stdout
(salida estándar del proceso) que tiene una .encoding
atributo correcto que Python se puede utilizar para codificar la cadena Unicode en una cadena de bytes para realizar la impresión requerida - y que ajuste depende de la forma el sistema operativo está configurado, a donde se dirige la salida estándar, y así sucesivamente.
Si no hay tal atributo, se utiliza el código predeterminado ascii
, y, como ha visto, a menudo no proporciona los resultados deseados ;-).
Puede consultar getattr(sys.stdout, 'encoding', None)
para ver si la codificación está allí (si es así, puede cruzar los dedos para asegurarse de que sea correcta ... o, tal vez, pruebe un truco específico de plataforma para adivinar el sistema correcto codificación para verificar ;-). Si no es así, en general, no hay una manera confiable o multiplataforma de adivinar cuál podría ser. Usted podría intente 'utf8'
, la codificación universal que funciona en muchos casos (seguramente más que ascii
;-), pero es realmente un giro de la rueda de la ruleta.
Para mayor confiabilidad, su programa debe tener su propio archivo de configuración para indicarle qué codificación de salida usar (tal vez con 'utf8'
como el predeterminado si no se especifica lo contrario).
También es mejor, para la portabilidad, para llevar a cabo su propia codificación, es decir, no
print someunicode
sino
print someunicode.encode(thecodec)
y, de hecho, si usted prefiere tener producción incompleta que un bloqueo,
print someunicode.encode(thecodec, 'ignore')
(que simplemente omite n en codificable caracteres), o, por lo general mejor,
print someunicode.encode(thecodec, 'replace')
(que utiliza marcadores de posición de la pregunta-marca de caracteres que no son codificables).
¿Qué versiones de OS y Python están ejecutando los servidores? – Puddingfox
Ubuntu 10.04 Server ambos – Soid
y Python 2.6.5 – Soid