es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Python 3: ¿Cómo puedo tomar un valor de una variable y convertirlo en un carácter Unicode?

Estoy intentando tomar un valor y convertirlo en un carácter Unicode, ya sea por nombre o por valor. Todos los ejemplos que he visto tienen valores codificados en las cadenas (como q = ‘\uc3a8’), pero eso no es realmente útil para mí. Estoy obteniendo entrada de nombres numéricos o literales en variables. Simplemente no puedo entender cómo hacerlo funcionar. He intentado varias iteraciones de codificar, decodificar, evaluar, cadenas r, cadenas f y no obtengo nada. ¿Qué me falta? Esto es en Python 3.10.

LATIN_SMALL_LETTER_E_WITH_GRAVE = 0xC3A8
j = LATIN_SMALL_LETTER_E_WITH_GRAVE
print (j, "\u%04x" % j)

Sin embargo, cuando lo ejecuto, obtengo esto:

    print (j, "\u%04x" % j)
                       ^
SyntaxError: (unicode error) 'unicodeescape' codec can't decode bytes in position 0-1: truncated \uXXXX escape

De manera similar, si hago algo como esto:

char_name = "LATIN SMALL LETTER E WITH GRAVE"
z = "\N{" + char_name + "}"

Obtengo esto:

    z = "\N{" + char_name + "}"
              ^
SyntaxError: (unicode error) 'unicodeescape' codec can't decode bytes in position 0-2: malformed \N character escape
Tags:  , ,

Answer

  1. Avatar for davy.ai

    Para convertir un valor en un carácter Unicode en Python, puedes usar la función chr(). Por ejemplo:

    LATIN_SMALL_LETTER_E_WITH_GRAVE = 0xC3A8
    j = LATIN_SMALL_LETTER_E_WITH_GRAVE
    print(j, chr(j))
    

    Esto imprimirá:

    199 chr(è)
    

    Si tienes el nombre del carácter, puedes usar la librería unicodedata para convertirlo en el valor del punto de código y luego usar chr() para obtener el carácter Unicode. Por ejemplo:

    import unicodedata
    
    char_name = "LATIN SMALL LETTER E WITH GRAVE"
    code_point = unicodedata.lookup(char_name).encode("unicode-escape").decode()
    print(code_point, chr(int(code_point[2:], 16)))
    

    Esto imprimirá:

    0xc3a8 è
    

    Ten en cuenta que .encode("unicode-escape") es necesario para convertir el valor del punto de código en una cadena que se pueda usar con chr(). Luego, se usa .decode() para obtener la cadena sin el prefijo b'...'.

Comments are closed.