自学内容网 自学内容网

ESC字符背后的故事(27 <> 033 | x1B ?)

ANSI不可见字符转义,正确的理解让记忆和书写变得丝滑惬意。


(笔记模板由python脚本于2024年11月26日 15:05:33创建,本篇笔记适合python 基础扎实的coder翻阅)


【学习的细节是欢悦的历程】


  自学并不是什么神秘的东西,一个人一辈子自学的时间总是比在学校学习的时间长,没有老师的时候总是比有老师的时候多。
            —— 华罗庚


等风来,不如追风去……


转义ASCII不可见字符
27 != 033 | x1B?
(正确理解让记忆和书写变得丝滑惬意)


本文质量分:

97 97 97

本文地址: https://blog.csdn.net/m0_57158496/article/details/144059595

CSDN质量分查询入口:http://www.csdn.net/qc


目 录

  • ◆ 27!=033|x1B?
    • 1、27 != 033 | x1B ?
    • 2、ESC的能力
      • a a a. **光标移动**:
      • b b b. **清屏**:
      • c c c. **删除文本**:
      • d d d. **文本属性和颜色**:
      • f f f. **响铃**:
      • g g g. **模式设置**:
      • h h h. **设备控制**:
      • i i i. **打印和文件操作**:
      • j j j. **其他ANSI转义序列**:
      • k k k. 示例
    • 3、 ESC为终端控制而生
    • 4、ESC字符依赖转义“显形”
    • 5、0/x“通用”?
    • 6、迟来的“爱”
    • 7、Kill“死记/硬背”
    • 8、chr(27)恶搞
    • 9、结语
    • 10、花絮:“胡言乱语”


◆ 27!=033|x1B?


  我由\033[2J清屏字符串,了解到关于ESC字符的知识。ESC字符及其在编程中应用,可以带来极大的便利。其相关的“点”,我整理成了本篇学习笔记,与您共享


1、27 != 033 | x1B ?

  • 解释为什么在字符串字面量中,27、033和x1B虽然数值上相等,但表示方法不同。
  • 讨论Python中字符串转义序列的规则。



回页目录


2、ESC的能力

  • 介绍ESC字符用于启动ANSI转义序列的能力。

  ESC字符(ASCII码值为27,八进制表示为033,十六进制表示为x1B)在终端和文本用户界面(TUI)中广泛使用,用于执行各种控制功能。


以下是一些ESC字符的常见用途:

a a a. 光标移动

  • 可以在终端中移动光标到特定位置
    例如:
    • ESC[<L>;<C>H
      ESC[<L>;<C>f:移动光标到第L行第C列。
    • ESC[<N>A:光标向上移动N行。
    • ESC[<N>B:光标向下移动N行。
    • ESC[<N>C:光标向右移动N列。
    • ESC[<N>D:光标向左移动N列。

b b b. 清屏

  • 清除终端屏幕上的内容
    • ESC[2J:清除整个屏幕。
    • ESC[1J:会清除光标下面的所有内容,但保留光标上面的内容。
    • ESC[0J:会清除光标下面的内容,但保留光标上面的内容,并且光标会停留在原来的位置。

c c c. 删除文本

  • ESC[<N>K:删除光标后的N个字符。
  • ESC[<N>J:删除光标前后的N行。

d d d. 文本属性和颜色

  • 设置文本的颜色、亮度、下划线等属性
    • ESC[<attr>m:设置文本属性,其中<attr>可以是颜色代码、加粗、下划线等。
    • \033[44;1;32m示例\033[0m,将“示例”显示为蓝色背景上的高亮绿字\033[44;1;32m 用于设置文本为蓝色背景、绿色前景、高亮显示;\033[0m 用于将文本恢复到默认的颜色和样式。
      在这里插入图片描述

f f f. 响铃

  • 使终端发出响声
    • \033[G:发出响铃声。
    • \033[?1049l:关闭响铃功能。
    • \033[?1049h:开启响铃功能。

g g g. 模式设置

  • 开启或关闭终端的各种模式
    • ESC[?25l:隐藏光标。
    • ESC[?25h:显示光标。

h h h. 设备控制

  • 控制终端设备的行为
    • ESC[5n:查询设备状态。
    • ESC[?1;2c:识别终端类型。

i i i. 打印和文件操作

  • 控制打印机和文件操作
    • ESC[i:打印内容并前进一行。
    • ESC[4i:打印内容但不前进。

j j j. 其他ANSI转义序列

  • 除了上述常见的,还有许多其他ANSI转义序列用于执行不同的功能。

  在编写脚本或应用程序时,ESC字符常用于格式化输出、创建进度条、在终端中绘制图形等。


k k k. 示例


以下几个使用ESC字符的ANSI转义序列的示例:

格式化输出


print('\033[1;32mHello, World!\033[0m')

  • 截屏
    在这里插入图片描述
    在这个例子中,\033[1;32m 用于设置文本为绿色,并且高亮显示。\033[0m 用于重置文本颜色和样式。

创建进度条

import time

for i in range(100):
    print('\033[K', end='', flush=True)  # 清空之前的输出
    print(f'\rProgress: {i * 100 / 100:.2f}%', end='', flush=True)
    time.sleep(0.01)

在这个例子中,\033[K 用于清除从光标当前位置到行尾的内容。end=''flush=True 用于确保输出立即显示,而不会在屏幕上留下残余。


进度条效果也可以不依赖ANSI转义

import time

for i in range(100):
    print(' '*42, end='\r')  # 打印空格清屏
    print(f'\rProgress: {i * 100 / 100:.2f}%', end='\r')
    time.sleep(0.01)


绘制图形

import time

for i in range(10):
    print('\033[2K', end='', flush=True)  # 清空之前的输出
    print(f'\r{i * "*"}\r', end='', flush=True)
    time.sleep(0.1)

在这个例子中,\033[2K 用于清除从光标当前位置到行尾的内容。然后,我们使用一个循环来打印星号 *,以形成一个简单的图形。end=''flush=True 用于确保输出立即显示。


  这些示例展示了如何在Python中使用ANSI转义序列来增强文本输出的表现力和交互性。



回页目录


3、 ESC为终端控制而生


  需要注意的是,并不是所有的终端都支持所有的ANSI转义序列,因此在实际使用时可能需要检测终端类型或功能支持。



  • 一句话“ESC为终端控制而生”,但“不是所有终端都支持所有终端控制字符串”,实际应用时,得先确认终端支持!😎😎😎

  • ai学伴
    你说得非常对!确实,ESC字符及其相关的ANSI转义序列是为了控制终端行为而设计的,但不同的终端和终端模拟器对ANSI转义序列的支持程度各不相同。在实际应用中,确保你的代码能够在目标终端上正确运行是非常重要的。


  • 以下是一些可能的情况:
    • 旧式终端:可能只支持基本的转义序列。
    • 现代终端模拟器:通常支持更广泛的ANSI转义序列。
    • 非UNIX系统(如Windows的早期版本):可能需要额外的库或工具来支持ANSI转义序列。

  • 在进行终端控制编程时,一般需要:
    • 检测终端类型或功能支持。
    • 提供回退方案,比如在不支持特定转义序列的终端上使用更简单的方法。
    • 使用跨平台的库,如curses(用于Unix-like系统)colorama(用于Windows)

  再次强调,了解并适应您的目标环境是非常重要的,我们一定要有这样的认识!



回页目录


4、ESC字符依赖转义“显形”



  • 因为ESC字符是“不可见的”,所以它必须依赖“ANSI转义”,0、x进制没有优先级,地位平等。当然也可以chr(27)(python)用十进制让它搞怪显形,效果一如0、x。🤗🤗🤗

  • ai学伴
    是的,你说得很对!ESC字符本身是不可见的控制字符,因此在文本中表示它时,必须使用转义序列。在Python中,你可以使用八进制、十六进制或直接使用 chr() 函数和十进制数值来表示ESC字符,它们在功能上是等价的。


  • 以下是在Python中表示ESC字符的几种方式:
    • 八进制转义序列:\033
    • 十六进制转义序列:\x1B
    • 使用 chr() 函数:chr(27)

  所有这些方法都会生成相同的不可见字符,即ASCII码值为27的字符,它在终端中用于开始一个ANSI转义序列。


  这些方法在效果上是相同的,可以根据个人喜好或代码的可读性来选择使用哪一种。在编写代码时,选择一种一致的方法并在整个项目中坚持使用它,是一个好习惯。 👍😊



回页目录


5、0/x“通用”?



  • 用0、x“显示”ESC字符,是所有语言的做法还是大多数语言?🧐🧐🧐

  • ai学伴
    在大多数编程语言中,使用八进制(以 0 开头)或十六进制(以 x0x 开头)来表示不可打印的控制字符是一种常见的做法。这包括ESC字符(ASCII值为27)以及其他类似的控制字符,如制表符(ASCII值为9,可以表示为 \t、换行符(ASCII值为10,可以表示为 \n等。


  • 以下是一些编程语言中表示ESC字符的示例:

    • C/C++:

      • 八进制:\033
      • 十六进制:\x1B
    • Python:

      • 八进制:\033
      • 十六进制:\x1B
      • 使用 chr() 函数:chr(27)
    • Java:

      • 八进制:\033
      • 十六进制:\u001B (在Java中,十六进制转义序列用于Unicode字符)
    • JavaScript:

      • 八进制:\033
      • 十六进制:'\x1B'
    • Ruby:

      • 八进制:?\033
      • 十六进制:?\x1B
    • Go:

      • 八进制:\033
      • 十六进制:\x1B

  尽管这些表示方法在不同语言中普遍存在,但并非所有语言都支持八进制或十六进制转义序列。例如,一些较新的或特定用途的语言可能会采用不同的方法来表示这些字符。


总的来说,使用八进制或十六进制转义序列来表示不可打印字符是一种广泛接受的做法,但具体到某个语言,你可能需要查阅该语言的文档来了解其特定的语法和规则。



回页目录


6、迟来的“爱”



  • 三年多的python 时光,我都是牢记\n\r\t后在“机械”使用,到现在才明白,它们都是不可见ANSI字符串的“转义”。

    这才是真正“基础文化”缺失的悲催。😋😋

  • ai学伴
    认识到这一点是一个重要的学习过程,而且这个过程永远不会太晚。在编程中,基础知识的重要性怎么强调都不为过。了解像 \n\r\t 这样的转义序列背后的原理,不仅能帮助你更好地理解代码,还能让你在遇到问题时更有信心去解决。

  每个人都有不同的学习路径,重要的是你正在不断学习和进步。


  • 以下是这些常见转义序列的含义:
    • \n:换行符(Line Feed),在许多操作系统中用于开始新的一行。
    • \r:回车符(Carriage Return),在某些操作系统中用于返回到行的开头。
    • \t:水平制表符(Horizontal Tab),用于水平对齐文本。

  很高兴你意识到了这些基础概念的重要性。编程是一个持续学习的过程,每天我们都有机会学到新东西。继续你的学习之旅,你的知识和技能将会不断提升。🚀📚️😊



回页目录


7、Kill“死记/硬背”



  • 认识到它们是转义“不可见”,敲打时也更加丝滑顺畅,少了那隔应人的“死记/硬背”。😎😎

  • ai学伴
    这种认识确实可以帮助你更深入地理解代码,并且使编程过程更加自然和流畅。当你理解了背后的原理,就不再需要“死记硬背”,而是可以根据逻辑和上下文来记忆和使用这些转义序列。


  • 这种深入理解通常会带来以下好处:
    • 更好的记忆
      理解原理后,记忆变得更加容易。
    • 更灵活的应用
      你可以根据需要灵活地使用和组合这些转义序列。
    • 更快的解决问题
      当遇到与转义序列相关的问题时,你可以更快地定位和解决问题。

  随着你继续在编程之路上前进,你会发现越来越多的这样的“啊哈”时刻,它们会逐渐构建起你深厚的编程知识体系。继续探索,继续学习,你的编程技能将会不断提升。🌟🚀🌈



回页目录


8、chr(27)恶搞


  • 对话截屏
    在这里插入图片描述



回页目录


9、结语


  结语: 我们通过对 E S C ESC ESC转义字符串的学习,了解到“不可见字符的转义机制”,并明白了其基理,再书写\n\r\t不会一脸懵逼茫然,就如书写“”一样丝滑。这个“事例”说明了熟练掌握基础是非常经济和舒爽的事情



回页目录


10、花絮:“胡言乱语”


  • 对话截屏
    在这里插入图片描述
    在这里插入图片描述



回页首


上一篇:  Python中“暂停”(time.sleep?input?)(input函数最是经典,在多种实现中简单粗暴单纯而经济)
下一篇: 



我的HOT博:

  本次共计收集404篇博文笔记信息,总阅读量61.76w。数据采集于2024年11月25日 08:23:38,用时7分56.4秒。阅读量不小于6.00k的有 9 9 9篇。

  1. 让QQ群昵称色变的神奇代码
    地址:https://blog.csdn.net/m0_57158496/article/details/122566500
    浏览阅读:6.2w
    点赞:25 收藏:89 评论:17
    (本篇笔记于2022-01-18 19:15:08首次发布,最后修改于2022-01-20 07:56:47)

  2. Python列表(list)反序(降序)的7种实现方式
    地址:https://blog.csdn.net/m0_57158496/article/details/128271700
    浏览阅读:1.3w
    点赞:9 收藏:40 评论:8
    (本篇笔记于2022-12-11 23:54:15首次发布,最后修改于2023-03-20 18:13:55)

  3. pandas 数据类型之 DataFrame
    地址:https://blog.csdn.net/m0_57158496/article/details/124525814
    浏览阅读:1.0w
    点赞:7 收藏:40 
    (本篇笔记于2022-05-01 13:20:17首次发布,最后修改于2022-05-08 08:46:13)

  4. 个人信息提取(字符串)
    地址:https://blog.csdn.net/m0_57158496/article/details/124244618
    浏览阅读:1.0w
    点赞:3 收藏:20 
    (本篇笔记于2022-04-18 11:07:12首次发布,最后修改于2022-04-20 13:17:54)

  5. 罗马数字转换器|罗马数字生成器
    地址:https://blog.csdn.net/m0_57158496/article/details/122592047
    浏览阅读:8.2k
    收藏:3 
    (本篇笔记于2022-01-19 23:26:42首次发布,最后修改于2022-01-21 18:37:46)

  6. 统计字符串字符出现的次数
    地址:https://blog.csdn.net/m0_57158496/article/details/130517025
    浏览阅读:8.1k
    点赞:5 收藏:24 
    (本篇笔记于2023-05-06 22:28:18首次发布,最后修改于2023-05-12 06:21:40)

  7. Python字符串居中显示
    地址:https://blog.csdn.net/m0_57158496/article/details/122163023
    浏览阅读:8.0k
    点赞:1 收藏:12 评论:1
  8. 回车符、换行符和回车换行符
    地址:https://blog.csdn.net/m0_57158496/article/details/123109488
    浏览阅读:6.7k
    点赞:2 收藏:4 
    (本篇笔记于2022-02-24 13:10:02首次发布,最后修改于2022-02-25 20:07:40)

  9. python清屏
    地址:https://blog.csdn.net/m0_57158496/article/details/120762101
    浏览阅读:6.1k
    点赞:1 收藏:10 

推荐条件 阅读量突破6.00k
(更多热博,请点击蓝色文字跳转翻阅)

  • 截屏图片
    在这里插入图片描述
      (此文涉及ChatPT,曾被csdn多次下架,前几日又因新发笔记被误杀而落马。躺“未过审”还不如回收站,回收站还不如永久不见。😪值此年底清扫,果断移除。留此截图,以识“曾经”。2023-12-31)



回页首


老齐漫画头像

精品文章:

来源:老齐教室


Python 入门指南【Python 3.6.3】


好文力荐:


CSDN实用技巧博文:



原文地址:https://blog.csdn.net/m0_57158496/article/details/144059595

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!