Introducción a la codificación de caracteres Python
1. Aviso:
La python 2
codificación predeterminada en es ASCII
y la python 3
codificación predeterminada en esunicode
unicode
Dividido en utf-32
(ocupa 4 bytes), utf-16
(ocupa dos bytes), utf-8
(ocupa 1-4 bytes), por lo que utf-16
es la unicode
versión más utilizada , pero aún se almacena en el archivo utf-8
porque ahorra utf8
espacio
En python 3
, encode
mientras que la codificación se string
convertirá en bytes
tipo, mientras que la decodificación decodificará el bytes
tipo en string
Tipo
En la unicode
codificación, 1 carácter chino = 2 bytes, 1 carácter inglés = 1 byte, recuerde: ASCII no puede almacenar caracteres chinos
utf-8
Es una codificación de caracteres de longitud variable, está unicode
optimizada, todos los caracteres en inglés todavía se ASCII
almacenan en forma y todos los caracteres chinos tienen uniformemente 3 bytes
unicode
Contiene los códigos de caracteres de todos los países y la conversión entre diferentes códigos de caracteres requiere unicode
un proceso
python
La codificación predeterminada en sí esutf-8
2. py2
El proceso de codificación y transcodificación en
Como se muestra:
Nota: debido a que unicode
es una codificación intermedia, cualquier conversión antes de la codificación de caracteres debe decodificarse en Unicode y luego codificarse en la codificación de caracteres que debe convertirse
Dos, conversión de codificación de caracteres
1. Conversión de la codificación de caracteres py2
el código se muestra a continuación:
#! /usr/bin/env python
# -*- coding:utf-8 -*-
# __auther__ == luoahong
s = "我是学员"
#utf-8解码成unicode编码
s_to_unicode = s.decode("utf-8")
print("--------s_to_unicode-----")
print(s_to_unicode)
#然后unicode再编码成gbk
s_to_gbk = s_to_unicode.encode("gbk")
print("-----s_to_gbk------")
print(s_to_gbk)
#gbk解码成unicode再编码成utf-8
gbk_to_utf8 = s_to_gbk.decode("gbk").encode("utf-8")
print("------gbk_to_utf8-----")
print(gbk_to_utf8)
#Salida
--------s_to_unicode-----
我是学员
-----s_to_gbk------
�����˧
------gbk_to_utf8-----
我是学员
Nota: En el caso anterior, el carácter adecuado es la codificación no Unicode, suscríbase, pero ¿qué pasa si la codificación de caracteres ya es Unicode?
2. Cuando la codificación de caracteres ya es Unicode
el código se muestra a continuación:
#! /usr/bin/env python
# -*- coding:utf-8 -*-
# __auther__ == luoahong
#u代码字符编码是unicode
s = u'你好'
#已经是unicode,所以这边直接是编码成gbk
s_to_gbk = s.encode("gbk")
print("----s_to_gbk----")
print(s_to_gbk)
#这边再解码成unicode然后再编码成utf-8
gbk_to_utf8 = s_to_gbk.decode("gbk").encode("utf-8")
print("-----gbk_to_utf8---")
print(gbk_to_utf8)
#Salida
----s_to_gbk----
���
-----gbk_to_utf8---
你好
Nota: cuando python2``中,在文件的开头指定字符编码,是要告诉解释器我现在的字符编码使用的是utf-8
estoy imprimiendo utf-8
caracteres chinos, si contienen caracteres chinos, se pueden imprimir. Por lo tanto, si no especifica la codificación de caracteres, la codificación del sistema se utiliza de forma predeterminada. Si la codificación de su sistema lo es ASCII
, se informará un error porque ASCII
los caracteres chinos no se pueden almacenar.
3. Conversión de codificación de caracteres de py3
En las instrucciones se ha mencionado la codificación de python 3, el valor predeterminado es unicode, por lo que la conversión entre codificaciones de caracteres no requiere el proceso de decodificación, solo codifica directamente, el código es el siguiente:
#! /usr/bin/env python
# __auther__ == luoahong
#无需声明字符编码,当然你声明也不会报错
s = '你好'
# 字符串s已经是unicode编码,无需decode,直接encode s_to_gbk = s.encode("gbk")
print("----s_to_gbk----")
print(s_to_gbk)
#这边还是一样,gbk需要先解码成unicode,再编码成utf-8 gbk_to_utf8 = s_to_gbk.decode("gbk").encode("utf-8") print("-----gbk_to_utf8---")
print(gbk_to_utf8)
#解码成unicode字符编码
utf8_decode = gbk_to_utf8.decode("utf-8")
print("-------utf8_decode----")
print(utf8_decode)
#Salida
----s_to_gbk----
b'\xc4\xe3\xba\xc3'
-----gbk_to_utf8---
b'\xe4\xbd\xa0\xe5\xa5\xbd'
-------utf8_decode----
你好
Nota: En python 3
, encode
mientras que la codificación se string
convertirá en un bytes
tipo, decode
mientras que la decodificación se bytes
convertirá en un string
tipo, por lo que puede ver fácilmente encode
después de que se haya convertido en un bytes
tipo de datos. También es necesario prestar especial atención: independientemente de si la python 3
codificación de caracteres se declara al principio del archivo, solo puede indicar que el archivo de Python es la codificación de caracteres, y la cadena en el archivo sigue siendo Unicode, como se muestra a continuación. figura:
3. Resumen:
1 、uniocode
uniocode
Puede reconocer todas las cadenas de codificación de caracteres
2 、python 2
La conversión entre codificaciones de caracteres debe pasar unicode
antes de la conversión, por lo que al imprimir, puede usarla unicode
o usar la codificación de caracteres correspondiente (especifique la codificación al principio del archivo) para imprimir caracteres o cadenas, porque no hay ningún carácter obvio y byte en py2 Distinguir, por lo que conducirá a ese resultado.
3 、python 3
Solo Unicode
reconociendo los caracteres, si se convierte al formato de codificación correspondiente, se convertirá directamente en bytes
el bytecode del tipo de codificación correspondiente , es decir, binario, necesita ser reconocido y debe decodificarse para Unicode
ser reconocido.