上下标形式的特定字符
有一次在微信朋友圈中,有个符号m2引起了我的兴趣,因为朋友圈的文本没有类似Word这样的富文本格式控制,这个平方米符号是怎么弄出来的呢?
我特意研究了一下,发现原来符号中还有一类上标符号, 比如说1~9的上标字符, 使用时只要输出这个字符放在m后面就好了,它的位置是设计好偏前一点的. 于是我找出来Unicode字符编码表研究了一阵,得到一些如果如下:
下表列出了这些特殊字符的Unicode码值. 将这个码值输入到Word中,选中,再按Alt+X键就可得到,很方便.
符号 上标形式 下标形式 备注
0 2070 2080
1 B9 2081 上标形式在ASCII码表中就已经定义. 2071是上标字符 i
2 B2 2082 上标形式在ASCII码表中就已经定义
3 B3 2083 上标形式在ASCII码表中就已经定义
4 2074 2084
5 2075 2085
6 2076 2086
7 2077 2087
8 2078 2088
9 2079 2089
+ 207A 208A
- 207B 208B
= 207C 208C
( 207D 208D
) 207E 208E
n 207F
从上表可以看出, 上标字符与下标字符除了上标1,2,3之外, 都定义在Unicode码值为2070~208E这一段. 上标1,2,3因为很常用, 早在ASCII码表中就得到了规定,编制Unicode的后人就不再重复规定了.
所以,如果在文本中编写如下公式:
(latex公式实现)
也可以直接用字符来做到的, 指定了正确的字体, 即使在功能简陋的记事本中也可以(这个博客系统反而不行!):
费马定理.rar
除了数字与括号之外,还有一些英文字母、希腊字母也有相应的的上标与下标形式,但好象并非全部都有.
不过,如果你的文本文件显示所用的字体不支持这些特殊字符,可能你会看到一个个的问号或是空白. 需要设置一下文本显示使用“支持Unicode字符的字体“ 就好了,比如Arial Unicode MS.
在手机上, 搜狗输入法(iOS版本的我确定有,其它操作系统的不确定)的符号中有一类叫"角标"的符号,里面收集了不少这样的字符,你可以找找看.
当然,这些字符也只是能力比较有限的表达手段, 要想专业、复杂、而又美观的显示公式, 还是得借助专业的工具,比如公式编辑器,Tex语法或专业软件等等。
2. 看起来相似,实际上大不同的字符.
我们不妨叫它"形似神不似"的字符.
之前,我以为定义一个符号很简单,指定一个形状与一个编码就好了,但了解之后才发现, 有的符号在不同的场合或不同的领域有不同的意义, 很可能肉眼看到的同一个符号,其后台可能并不是同一个字符.
在这样的情况,哪些视为同一字符,哪些视为不同的字符,其实是个比较伤脑筋的事,没有我们想像的那么简单!好在这样的事不用我们管,Unicode标准组织想好了相应的规则或具体进行了划分和指定,在字符的说明中指了出来。
一个不太严格的例子就是全角字符与半角字符,看起来相像,实际上是不同的字符(码值不同). 下面举一个更极端的例子,一个中间分隔点有这么多变化,而且都是合法的Unicode字符.
还有一种情况是, 单一的特殊字符与用多个字母表示的字符,如一些特定组合℡、™、㏙ 、℻ ,或者是罗马数字Ⅳ 、Ⅷ、Ⅻ 等,他们都有特定的字符编码,与用英文字母拼凑出来的组合当然是完全不同的字符。
这样的现象会造成一些迷惑性的问题,比如你在某些场合使用了这类特殊字符, 但查找时又用了英文拼合的字串(或者其它的相似字符)去搜索,很显然计算机会告诉你找不到!
以前有一种网址欺骗的手段,也是基于这样的原理, 以其它字符集或编码的外形相同的字符来构建一个看起来相同的网址诱导你去点击, 让你以为那是正确的网址。 由于用户判断时往往只看外形,不会去解析它的码值是否正确,也就不能分辨是否真实的网址, 结果就中招了.
3.组合型字符
而且,Unicode中还有更有意思的字符, 比如定义在Unicode码值 0300~036F区间的组合型字符, 它们可以和前面输入的字符进行组合显示。
换句话说,它们显示时不占有字符的宽度,这样后一个字符就显示在前一个字符的位置上,造成两个字符的叠加而达到特殊的显示效果。但这一情况显然即不属于Latex之类的排版语法的控制,也不是Word的上下标或公式编辑器等特殊对象带来的排版效果,这个可能是从字体显示技术上取巧了。
在Word中演示一下: 我是一个化学生, 想显示氧原子带有一对孤对电子的样子,选中了上图中的0308组合字符. 在前面输入一个大写的氧原子,后面输入0308,再选中0308,按Alt+X,即可以得到如下的字符:
组合型字符.rar
这个不需要特殊的画图或插入图片,可以和其它文字一样正常排版.
测试之后我发现,这种显示与字体有关系,不是每种字体都能正常显示,比如"楷体","宋体"不行,但是Arial, 微软雅黑没有问题,即使在记事本中也可以正常显示. 如果按退格键往前删除,可以看到先消失顶上两个小黑点,再消失那个字符O.
利用上面提供的各种小符号,就可以组合出不同的扩展样式出来了.
这样的组合型字符还不止0300~036F这一段,别的地方也有定义,我就不展开了。有兴趣的请参见我上一篇博文中分享的文件Unicode Charts.