Estoy trabajando en WinXP 5.1.2600, escribiendo una aplicación de Python que involucra pinyin chino, que me ha involucrado en interminables problemas Unicode. Cambiar a Python 3.0 ha resuelto muchos de ellos. Pero la función de impresión() para la salida de la consola no es consciente de Unicode por algún motivo extraño. Aquí hay un programa pequeño.python 3.0, cómo hacer que print() genere unicode?
print('sys.stdout encoding is "' + sys.stdout.encoding + '"')
str1 = 'lüelā'
print(str1)
salida está (cambiando paréntesis angulares de corchetes para facilitar la lectura):
sys.stdout encoding is "cp1252" Traceback (most recent call last): File "TestPrintEncoding.py", line 22, in [module] print(str1) File "C:\Python30\lib\io.py", line 1491, in write b = encoder.encode(s) File "C:\Python30\lib\encodings\cp1252.py", line 19, in encode return codecs.charmap_encode(input,self.errors,encoding_table)[0] UnicodeEncodeError: 'charmap' codec can't encode character '\u0101' in position 4: character maps to [undefined]
Tenga en cuenta que U = \ xfc = 252 da ningún problema, ya que es ASCII superior. Pero ā = \ u0101 está más allá de 8 bits.
¿Alguien tiene una idea de cómo cambiar la codificación de sys.stdout a 'utf-8'? Tenga en cuenta que Python 3.0 ya no usa el módulo codecs
, si entiendo bien la documentación.
Disculpas, te di el programa sin el preámbulo. Antes de las 3 líneas dadas, que comienza así:
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import sys
Por desgracia, la codificación especificada por la "codificación:" la línea es la codificación del código fuente , no de la salida de la consola. ¡Pero gracias por tus pensamientos!
cmd.exe puede mostrar caracteres Unicode si utiliza una fuente que puede mostrar los caracteres Unicode deseados, y si cambia la página de códigos a utf-8 (puede hacerlo con: 'CHCP 65001') – smerlin
Eso no funciona realmente funciona de manera confiable ... además de que MSDN recomienda usar UTF-16, la codificación nativa de todos los sistemas operativos de Windows NT. – dom0
@csde_rats ¿no usan el UCS-2 de ancho fijo más antiguo en lugar de UTF-16? – Kos