Red de conocimiento informático - Material del sitio web - Cómo entender Unicode y la conversión de ancho completo y medio ancho en Python3

Cómo entender Unicode y la conversión de ancho completo y medio ancho en Python3

1. Unicode es un estándar de codificación que representa una asignación entre caracteres y números, con longitud variable.

2. ¿Cómo codificar datos mapeados en bytes? Esta es una codificación específica: la codificación más popular es UTF-8, que también tiene longitud variable.

Str es todo Unicode en python3: "La codificación predeterminada del código fuente de Python es UTF-8"

Codificar en python3: Cadena según los parámetros encode() entre paréntesis Para codificar es generar bytes.

Entonces:

En: 'Chinese'.encode('utf-8')

Salida: b'\xe4\xb8\xad\xe6\ x96\x87'

Aquí, b es un byte y \x significa que x es de escape, es decir, 0x. Otro ejemplo:

En: 'abc'.encode('utf-8')

Fuera: b'abc'

b'a arriba ' en realidad representa el número 97 y b'a' representa el número binario de la cadena 'a':

[In ]:'abc'.encode('utf-8')[0]

[Salida]: 97

Al mismo tiempo, se puede decodificar b'\x', es decir:

Entrada: b'\xe4\xb8\xad \xe6\x96 \x87'.decode('utf-8')

Fuera: ' Chino'

Además de codificar('utf-8'), también puedes use ord para obtener un solo utf El número correspondiente al carácter -8:

En [60]: ord('a')

Salida[60]: 97

In [61]: ord('a') #Esto es un ancho completo

Out[61]: 65345

Además de decodificar ('utf- 8'), también puedes usar chr para obtener el número de caracteres utf-8 correspondientes:

En [62]: chr(97)

Salida[62]: 'a'

Además de Unicode, ¿existen otros estándares de codificación? Existen, por ejemplo, GBK, también conocidos como cp936.

La diferencia entre ancho completo y medio ancho significa que los caracteres con el mismo significado se muestran en diferentes tamaños. Específicamente, la codificación de ancho completo y medio ancho son dos resultados:

En [70]: "mn".encode('utf-8')

Fuera[ 70]: b'\xef\xbd\x8d\xef\xbd\x8e

[Entrada]: "mn".encode('utf-8')

[Salida] :b' mn'

¿Cuál es su relación correspondiente? (Citado aquí)

Instrucciones de conversión

Instrucciones de conversión de ancho medio a ancho completo

Hay un patrón (sin espacios):

La codificación Unicode de caracteres de ancho completo varía de 65281 a 65374 (hexadecimal 0xFF01 ~ 0xFF5E)

La codificación Unicode de caracteres de ancho medio varía de 33 a 126 (hexadecimal 0x21 ~ 0x7E)

Especial casos:

Los espacios son especiales, los caracteres de ancho completo son 12288 (0x3000), los caracteres de ancho medio son 32 (0x20)

Excepto los espacios, ancho completo/ancho medio los caracteres son Unicode El orden de codificación corresponde (ancho medio + 0x7e = ancho completo), por lo que puede utilizar el método +- para manejar directamente datos que no sean espacios.

Utilice el método +- para manejar datos que no sean espacios directamente y manejar espacios por separado.

El código se basa en este cambio (para adaptarse a python3, cambie unichr a chr), es decir:

def strQ2B(ustring):

"""De lleno a la mitad"""

rstring = ""

para uchar en ustring:

inside_code=ord(uchar)

if inside_code == 12288: #Conversión directa de espacio de ancho completo

inside_code = 32

elif (inside_code >= 65281 and inside_code <= 65374): #Ancho completo caracteres (excepto espacios) según la relación Convert

inside_code -= 65248

rstring += chr(inside_code)

return rstring

En [ 69]: strQ2B( 'Hola python')

Fuera[69]: 'Hola python'