Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

585
Vistas
Intentando imprimir caracteres ASCII 128 a 160, ¿por qué se detiene en 157?

Soy nuevo en Python y estoy aprendiendo codificación/codificación, unicode, ascii, etc. Me gustaría imprimir caracteres ASCII según sus códigos y usando la función chr().

 def table_ascii(): "procédure imprimant une table des caractères ascii avec leur valeurs" i = 127 while i < 258: print(f"{i} -> {chr(i)}") i += 1 table_ascii()

Desafortunadamente, el resultado es incorrecto. Se detiene en el código 157:

 127 -> 128 -> 129 -> 130 -> 131 -> 132 -> 133 -> 134 -> 135 -> 136 -> 137 -> 138 -> 139 -> 140 -> 142 -> 143 -> 144 -> 146 -> 147 -> 148 -> 149 -> 150 -> 151 -> 152 -> 154 -> 155 -> 157 ->

Entiendo que estos códigos se devuelven en blanco, pero ¿por qué detienen el proceso?

Configuración:

  • Python 3.8.10 (predeterminado, 28 de septiembre de 2021, 16:10:42) [GCC 9.3.0] en Linux
  • Usando VIM - Vi mejorado 8.1

Cuando ejecuto este código en Visual Studio Code, el script produce una salida a través de 256. Pero en mi consola (Linux Mate), se bloquea. Eso es difícil de entender para mí...

over 4 years ago · Santiago Trujillo
2 Respuestas
Responde la pregunta

0

En primer lugar, ASCII solo sube a 127 (0x7F). chr() en realidad devuelve el carácter Unicode .

Creo que el problema es que cuando se imprime el comando del sistema operativo (OSC) U+9D (157), su terminal inicia una cadena de control y espera un terminador de cadena como U+9C String Terminator , U+1B Escape seguido de U+5C barra invertida, o U+7 BEL . Dado que ninguna de esas secuencias se imprime más tarde, la terminal deja de mostrar la salida. Para obtener más información, consulte Código de escape ANSI § Secuencias de escape Fe y códigos de control C1 en Wikipedia.

Los caracteres Unicode U+80 (128) a U+9F (159) son caracteres de control, lo que significa que, por lo general, no se pueden imprimir, por lo que, en primer lugar, nunca obtendrá resultados sensatos.

over 4 years ago · Santiago Trujillo Denunciar

0

Como se menciona en los comentarios, los caracteres entre 128 y 160 son una especie de tierra de nadie. No están definidos en la especificación Unicode, pero pueden tener un significado especial para varias pantallas. Esa es la razón por la que Unicode no los toca: demasiados usos variables en juego.

Una terminal como Linux xterm acepta códigos de control para hacer cosas como mostrar texto en color. Mirando las secuencias de control Xterm vemos

 Privacy Message (PM is 0x9e)

Eso es 158 decimal y es uno de los caracteres de control de 8 bits de xterms. Esto inicia un "mensaje privado" que continúa hasta que se ve un carácter terminador de cadena definido. xterm no implementa el "mensaje privado" y, según su salida, simplemente ignora la salida restante como parte de ese mensaje.

Esto es algo del tipo VT100. Algunos terminales pueden implementar algunas acciones. Otros pueden tener un carácter asignado a ese octeto. No encontrará ninguna implementación consistente.

over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda