基础
什么是 ASCII 字符画?简史与主要类型
用键盘字符画出的图是怎么回事,又是从哪里来的。
ASCII 字符画是只用键盘上能打出的字符画出的图。它没有颜色,也没有线条,而是把 /、\、_、| 等字符一行行排列,拼出文字或图案。
|\__/|
( o o )
=\ ww /=
/ \
(_| |_)
五行高的小猫,和终端程序启动时打印的大 Logo,都是 ASCII 字符画。
什么是 ASCII?
ASCII 是 1963 年首次作为美国标准发布的字符编码。它让每台计算机对每个字符使用相同的编号。128 个编码中有 95 个是可打印字符:英文大小写字母、数字、空格,以及 ! @ # $ % ^ & * ( ) - _ = + [ ] { } ; : ' " , . < > / ? \ | ~ 等符号。
几乎所有计算机和字体都支持这 95 个字符,所以只用它们画出的图粘贴到哪里都不会变成乱码。这也是 ASCII 字符画流传至今的重要原因。
简短的历史
- 打字机图画。 用字符作画比计算机还早。从 19 世纪末开始,就有人在打字机上叠打字母和符号来作画。
- 打印机与研究所。 1960 年代,能打印图像的打印机很少见,于是人们用字符来打印图画。著名的例子是 1966 年贝尔实验室的 Ken Knowlton 和 Leon Harmon,他们把一张照片变成了由小符号组成的网格。
- 表情符号。 1982 年,卡内基梅隆大学的 Scott Fahlman 提议在留言板上用
:-)来标记玩笑。 - BBS 与 ANSI 艺术。 在 1980 到 1990 年代的拨号电子公告板(BBS)上,人们用字符画装饰登录画面和签名。结合 IBM PC 方块字符(
█ ▓ ▒ ░)和颜色的图画被称为 ANSI 艺术。 - FIGlet。 1991 年,Glenn Chappell 和 Ian Chai 编写了 FIGlet,一个把文字变成由字符组成的大横幅的程序。时至今日,它仍是制作终端程序启动 Logo 和 README 横幅最常用的方法。
- 颜文字。 在日本,
(^_^)这种正面阅读的表情流行开来。随着 Unicode 普及,人们开始混用各种文字的字符,比如ʕ•ᴥ•ʔ和¯\_(ツ)_/¯。
ASCII 字符画的类型
| 类型 | 是什么 | 例子 |
|---|---|---|
| 文字横幅 | 用 FIGlet 字体把文字变成多行大字 | 启动画面、README 标题 |
| 线条画 | 用 / \ _ | 等字符勾勒轮廓 |
小猫、蛋糕 |
| 明暗画 | 用 .:-=+*#%@ 等浓淡不同的字符填充区域 |
转换后的照片 |
| 方块与 ANSI 艺术 | 用 █ ▓ ▒ ░ 等方块字符拼成的图 |
游戏 Logo、像素画 |
| 颜文字与单行图案 | 用一行表现表情或动作 | (╯°□°)╯︵ ┻━┻ |
严格来说,只使用 95 个 ASCII 字符的才算 ASCII 字符画。使用 █、ツ 等范围外字符的图,叫作 Unicode 艺术或符号图案。日常使用中,人们通常把它们统称为 ASCII 字符画。
为什么需要等宽字体?
ASCII 字符画默认每个字符宽度相同。在代码编辑器和终端使用的等宽字体中,i 和 W 占用同样的宽度,所以各行能对齐。
大多数聊天软件和社交应用使用比例字体,每个字符宽度各不相同。把 ASCII 字符画粘贴进去,空格和 i 会变窄,W 和 @ 会变宽,图就会左右错位。
有三种解决办法。
- 使用代码块。 在 Discord、Slack、GitHub 等支持代码块的地方,用 ``` 把图包起来,就会切换成等宽字体。请参见如何把 ASCII 字符画粘贴到 Discord。
- 使用较窄的图案。 单行颜文字或较窄的字体不容易露出问题。请参见为什么 ASCII 字符画在聊天应用里会乱。
- 以图片发送。 把字符画保存为 PNG,在任何应用里看起来都一样。
用在哪里?
- 终端程序的 Logo 和服务器登录画面
- GitHub README 的标题横幅和代码注释中的分隔标记
- Discord 服务器公告和游戏聊天
- 生日祝福和社交媒体简介