Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

582
Visualizações
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 Respostas
Responde à pergunta

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 Relatório

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 Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda