Colección de citas famosas - Diccionario de frases chinas - Cómo resolver la salida confusa de Python a archivos

Cómo resolver la salida confusa de Python a archivos

Codificación de archivos de código Python

La codificación predeterminada de los archivos py es la codificación ASCII. Cuando se muestra chino, se realizará una conversión de ASCII a la codificación predeterminada del sistema. , se producirá un error: Error de sintaxis: carácter no ASCII. Debe agregar instrucciones de codificación en la primera o segunda línea del archivo de código:

1 # coding=utf-8 ##Almacenamiento de caracteres chinos en codificación utf-8

2 print 'Chino'

La entrada de cadena directamente como se indica arriba se procesa de acuerdo con la codificación del archivo de código. Si se utiliza la codificación Unicode, existen los siguientes tres métodos:

1 s1 =. u' Chinese' #u significa almacenar información en codificación Unicode

2 s2 = unicode('Chinese', 'gbk')

unicode es una función incorporada, y la segunda El parámetro indica la fuente. El formato de codificación de la cadena.

Decodificar es un método que tiene cualquier cadena para convertir la cadena al formato Unicode. El parámetro indica el formato de codificación de la cadena fuente.

Encode también es un método que tiene cualquier cadena, convirtiendo la cadena al formato especificado por el parámetro.

(2) Codificación de cadena

Utilice u'carácter chino' para construir un tipo Unicode; de ​​lo contrario, construirá un tipo str.

La codificación str está relacionada con el entorno del sistema, generalmente el valor obtenido por sys.getfilesystemencoding()

Entonces, para convertir de Unicode a str, debe usar el método de codificación

Para convertir de str a Unicode, necesitas usar decode

Por ejemplo:

# coding=utf-8 #El formato de codificación predeterminado es utf-8

s = u'Chinese' #texto codificado Unicode

print s.encode('utf-8') #Convertir al formato utf-8 para la salida

Pero cuando Python procesa codificación no ASCII, aparece el siguiente error ocurre con frecuencia:

p>

UnicodeDecodeError: el códec 'ascii' no puede decodificar el byte 0x en la posición 1: el ordinal no está en el rango (128)

¿0x es un número superior a 128? , Python por defecto Se cree que la codificación del idioma es codificación ASCII, por lo que no se pueden procesar otras codificaciones. Debe configurar la codificación predeterminada de Python en la codificación requerida.

Una solución es agregar en el código:

import sys

reload(sys)

sys.setdefaultencoding('utf - 8') (donde utf-8 es la codificación de caracteres que desea generar)

Explicación:

El método sys.setdefaultencoding se eliminó después de que Python importó site.py (código específico que Puedes verlo mirando site.py), así que si quieres usarlo, puedes cargarlo nuevamente

Resumen:

u=u'texto codificado Unicode'

g=u.encode('gbk') #Convertir a formato gbk

print g #Este es un código confuso, porque el entorno actual es utf-8 y el texto codificado con gbk es un código confuso

str=g.decode('gbk').encode('utf-8') #Lea g en formato de codificación gbk (debido a que está codificado en gbk, debe saber de antemano que es GBK codificación) y convertirlo al formato utf-8 Salida

print str #Visualización normal de chino (igual que la salida del archivo)

Método seguro:

s. decode('gbk', 'ignore'). encode('utf-8′) #Leer en codificación gbk (por supuesto, leer el texto en formato de codificación gbk) e ignorar la codificación incorrecta, convertir a codificación utf-8 y generar.

¡Recomendado estudiar el "Tutorial de Python"!