Introducción a la codificación de caracteres Python

Introducción a la codificación de caracteres Python

1. Aviso:

La python 2codificación predeterminada en es ASCIIy la python 3codificación predeterminada en esunicode

unicodeDividido en utf-32(ocupa 4 bytes), utf-16(ocupa dos bytes), utf-8(ocupa 1-4 bytes), por lo que utf-16es la unicodeversión más utilizada , pero aún se almacena en el archivo utf-8porque ahorra utf8espacio

En python 3, encodemientras que la codificación se stringconvertirá en bytestipo, mientras que la decodificación decodificará el bytestipo en stringTipo

En la unicodecodificación, 1 carácter chino = 2 bytes, 1 carácter inglés = 1 byte, recuerde: ASCII no puede almacenar caracteres chinos

utf-8Es una codificación de caracteres de longitud variable, está unicodeoptimizada, todos los caracteres en inglés todavía se ASCIIalmacenan en forma y todos los caracteres chinos tienen uniformemente 3 bytes

unicodeContiene los códigos de caracteres de todos los países y la conversión entre diferentes códigos de caracteres requiere unicodeun proceso

pythonLa codificación predeterminada en sí esutf-8

2. py2El proceso de codificación y transcodificación en

Como se muestra:

Inserte la descripción de la imagen aquí
Nota: debido a que unicodees 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-8estoy imprimiendo utf-8caracteres 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 ASCIIlos 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, encodemientras que la codificación se stringconvertirá en un bytestipo, decodemientras que la decodificación se bytesconvertirá en un stringtipo, por lo que puede ver fácilmente encodedespués de que se haya convertido en un bytestipo de datos. También es necesario prestar especial atención: independientemente de si la python 3codificació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

uniocodePuede reconocer todas las cadenas de codificación de caracteres

2 、python 2

La conversión entre codificaciones de caracteres debe pasar unicodeantes de la conversión, por lo que al imprimir, puede usarla unicodeo 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 Unicodereconociendo los caracteres, si se convierte al formato de codificación correspondiente, se convertirá directamente en bytesel bytecode del tipo de codificación correspondiente , es decir, binario, necesita ser reconocido y debe decodificarse para Unicodeser reconocido.

Supongo que te gusta

Origin blog.csdn.net/qq_25562325/article/details/111408324
Recomendado
Clasificación