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"!