字符编码与字符集 — 输入法
输入法的需求是来源于键盘的限制。键盘原在打字机时代为英文字母而设计,但键盘只有一百多个键,在没有软件的帮助下它是无法输入中文或其他表意文字的字符。现在世界上多数的输入法软件是为汉语,韩语以及日语等东亚地区的文字而设计。除此之外,其它需求输入法的语言不是很普遍。一般用户把凡是从键盘上输入文字的软件都叫做输入法。即便是英语这样的语言,直接从键盘输入的过程也叫做输入法。这显然是不合适的,我们需要区别两种输入方法的不同之处。这两种一个叫做输入法,另一个叫做键盘布局。
输入法与键盘布局
输入法软件
是一种协助用户和计算机沟通的软件,用户通过输入外码
到输入法软件,输入法软件负责转换外码成为一个或多个字符,从而实现输入东亚地区语言的文字。在英语里,”输入法”(Input Method)指的是输入方式而不是所实现它的软件。早期,英语像中文一样没有对这两个概念进行区分。受Windows操作系统的影响,输入法软件被称为”输入法编辑器”(Input Method Editor, IME)。
键盘布局
则是直接映射键盘的按键成为字母。对英文、法文、德文等西方文字来说,所有的字母都可在键盘上轻松地安排妥当。用户只需要按一个键或者一个组合键就可输入一个字母。即便对于英文而言,US和UK的键盘布局也是不同的。
在中国境内销售的键盘大多是美式布局,然后在这个键盘布局上,我们再借助于像搜狗拼音输入法、五笔输入法等之类的输入法软件来实现中文的输入。在台湾、香港等使用繁体中文的地区来说,仓颉输入法、注音输入法则是主流。
汉字输入码/外码
汉字输入码也叫外码
(外码是相对于内码来说的),是通过键盘字符把汉字输入计算机而设计的一种编码。输入英文时想输入什么字符便按什么键,外码和内码是一致的。而汉字输入则不同,可能要按几个键才能输入一个汉字。对于同一汉字而言,输入法不同,其外码也是不同的。目前常用的外码分为以下几类:
- 数字编码,比如区位码、GB内码;
- 拼音编码,比如全拼、双拼、自然码、注音等;
- 字形编码,比如五笔、笔画、郑码等。
这些不同的外码对应着不同的输入法。其中,区位码/GB内码、双拼、注音等输入法是我们不熟悉的,下面一一介绍。
区位码/GB内码输入法
区位码和GB内码是根据GB 2312以及GBK的标准而来的。在DOS时代,许多中文系统都实现了区位码和机内码输入法。在DOS被Windows系统取代后,拼音输入法、五笔输入法成为了主流的中文输入法,区位码和机内码输入法就很少有人使用了。Windows XP中还有区位码和机内码输入法,但到了Windows Vista就被移除了。
Windows XP中的区位码/内码输入法
区位码是一种无重码、码长为4的数字码,使用区位码输入法时只要直接从键盘中输入4个由十进制数(0~9)的区位码即可输入汉字,其编码范围为0101-9494
。在输入过程中当第四个数字输入后,在编辑屏幕的插入点立即显示出所键入的区位码所代表的汉字。
例如,汉字
钱
在第39区、第14位,因此键入3914
即可输入钱
。
你也可以只输入区码,按空格后,输入法会列出该区所有的汉字,然后你可以用键盘选择或者使用鼠标点选。
GB内码输入法与区位码输入法类似,只不过其编码范围为A1A1-FFFF
。
例如,汉字
钱
的内码为C7AE
,因此键入C7AE
即可输入钱
。
与区位输入法类似,你也可以只输入内码的前两位,按空格后,输入法会列出该内码范围内的所有汉字,然后你可以用键盘选择或者使用鼠标点选。
区位码和机内码输入法的优点就是无重码,没有使用拼音输入法时经常出现的候选字。当然缺点也是显而易见的,其编码难以记忆,大多数时候只能靠查表。对于录入特殊符号,如制表符、希腊字母或者发音、字形不规则的生僻字时,区位码和机内码输入法或许能派上用场。
关于中文字符编码的更多细节,请参阅字符编码与字符集 — 中文字符集。
双拼输入法
双拼是拼音输入法的一种编码方案。相对于全拼而言,使用双拼输入汉字时只需输入一个代表声母的字母
,一个代表韵母的字母
,就可以打出任意一个汉字了。目前Windows、macOS、Android、iOS平台上都有支持双拼的输入法,包括iOS系统自带输入法、 QQ输入法、百度输入法、搜狗输入法、谷歌输入法和微软必应输入法等。
搜狗拼音输入法中的双拼输入法
iOS中的双拼输入法
双拼编码方案
我们知道汉语拼音是由声母和韵母组成的。声母和韵母又可以划分为如下:
- 声母
- 单声母,如 q、w、r、t 等,它们只有一个字符
- 双声母,有3个,分别是 zh、ch、sh
- 零声母,如
啊(ā)
- 韵母
- 单韵母,如 a、o、e、i、u 等,它们也只有一个字符
- 非单韵母,如 ei、uan、en、an、ao、ing 等
双拼编码就是通过一定的规则把汉语拼音的声母和韵母分别对应到键盘上26个字母中的一个。对应规则可谓是仁者见仁智者见智,因此诞生了很多种不同的编码方案。
- 对于单声母和单韵母,直接与键盘上的按键相对应
- 对于双声母,使用某个单韵母的键与之对应,如
自然码方案
为 zh → v、ch → i、sh → u 。因为双拼的原则是第一个键为声母,所以用户如果在第一个键上按了韵母,那一定就是需要转换的双声母了。 - 对于零声母,双拼中则需要把这个零声母补上:
- 固定一个字母(字母
O
)做零声母 + 韵母所在键,如微软双拼、智能ABC、紫光双拼 - 以韵母首字母为零声母 + 韵母所在键,如拼音加加
- 单韵母、三韵母为韵母首字母 + 韵母所在键,双韵母为韵母首字母 + 韵母末字母(与全拼一致),如自然码、小鹤双拼
- 固定一个字母(字母
下面是一些流行的双拼方案键位图。
在搜狗双拼和微软双拼方案中,ü在Y键,ing在分号键。
在汉语拼音方案中,v是唯一一个没有被使用的英文字母,官方的解释是V用来拼写外来语、少数民族语言和方言。因此v在拼音输入法中常用作输入特殊符号的先导符,例如搜狗拼音全拼输入法中的V模式。由于英语种没有
ü
这个字母,大部分汉语拼音输入法以v
代替ü
进行键入。这也导致翻译人名时带ü
的名字写成v
,如吕
写作了Lv
;另外也有写成Lu
的情况,容易与陆
混淆。为解决这一问题,中华人民共和国自2012年5月15日起新发电子护照时,对姓名中的ü
改写成yu
,如吕
写成Lyu
,女
写成Nyu
。
与全拼比较,双拼中由于拼音对应的字母与编码没有直观的联系,因此需要记忆键位(主要是韵母与按键的对应关系)后才能流畅使用。对于初学者,可以通过一些在线学习平台,不断的学习和练习双拼布局键位,慢慢可以达到对键位的熟悉。
注音输入法
注音输入法是输入繁体中文的主流输入法。作为一名80后,我印象中注音符号
在小学课本中是有教的。新华字典以及一些在线汉语词典都会显示注音符号。
很多大陆地区的人看到注音符号以为是日文,其实不然。注音符号,简称注音,是标准汉语标音系统之一,以章太炎编创的“纽文”、“韵文”为蓝本,1912年由中华民国教育部制定、1918年正式发布,1930年改为现名。经过百年演变,现有37个字母(声母21个、介音3个及韵母13个)。中华民国自建国之初以来一直以注音符号为国语(现代标准汉语)的主要拼读工具,也是小学国语教育必修内容。中华人民共和国则在1958年推行汉语拼音方案前使用之。两岸分治这么久,但却丝毫没有影响相互间的语言沟通。这其中最重要的原因是,虽然汉字标音的符号不同,但发音确是基本相同的。
注音与拼音的对照表
标准汉语标音系统有好几个方案,我们所熟知的汉语拼音只是其中之一,其它的还有:
- 注音符号
- 通用拼音
- 威妥玛拼音
- 国语罗马字
- 台湾闽南语罗马字拼音方案
对于那些想输入繁体中文但又不熟悉注音输入法的人来说,现在完全可以采用拼音输入法来输入繁体中文。
键盘排列
注音符号的键盘排列方式有多种方式,有大千式、倚天41键式、倚天26键式、IBM式等。大千式是台湾使用最广的输入方式,Windows称之为标准式,是其默认的键盘排列方式。台湾市场上所出售的键盘,绝大多数亦印有此排列。
大千式注音输入法的键盘排列
iOS系统自带的注音输入法采用的也是大千式的键盘排列。
iOS中的注音输入法的键盘排列
ALT码输入法
在PC机上有很多字符没有直接对应的按键,此时就可以通过Alt-数字键盘输入法(Alt码输入法)输入这些字符,方法是按住Alt键再通过数字键区输入字符代码,这些代码被称为Alt码。需要注意的是,第一个数字键是否为0会决定从哪个字符集来查找字符:
ALT+<n>
, 将产生基于Code Page 437 (EASCII)
的字符ALT+<0n>
, 将产生基于Code Page 1252 (ISO 8859-1/Latin-1的超集)
的字符
These numbers became so well known and memorized by computer users that Microsoft was forced to preserve them even though it used a new and different set of code pages for Windows, such as CP1252. These new code pages were called ANSI code pages by Microsoft, while the old ones were called OEM code pages. Holding Alt and typing three digits (first one non-zero) would attempt to translate the code from the 8-bit OEM code page (for example, CP437 or CP850). A leading zero (0) and then a number would produce the character directly from the ANSI code page.
A legacy of code page 437 is the number combinations used in Windows Alt key codes. The user could enter a character by holding down the Alt key and entering the three-digit decimal Alt keycode on the numpad and many users memorized the numbers needed for CP437. When Microsoft switched to their proprietary character sets (such as CP1252) and later Unicode in Windows, the original codes were retained (Microsoft added the ability to type a code in the new character set by typing the numpad 0 before the digits).
Code Page 437 和 Code Page 1252都是基于8比特的编码系统,因此Alt码
的范围是0~255,例如:
- Alt +
224
,输出希腊字母α
- Alt +
0224
,则输出带有重音符号的à
下面是一些常用字符的Alt码:
Character | ALT Code | Character Name | Character | ALT Code | Character Name |
---|---|---|---|---|---|
¶ | ALT 20 | Pilcrow sign, paragraph sign | σ | ALT 229 | Greek small letter sigma |
§ | ALT 21/0167 | Section sign | µ | ALT 230 | Micro sign |
↨ | ALT 23 | Up down arrow with base | τ | ALT 231 | Greek capital letter tau |
↑ | ALT 24 | Upwards arrow | Φ | ALT 232 | Greek capital letter phi |
↓ | ALT 25 | Downwards arrow | Θ | ALT 233 | Greek capital letter theta |
→ | ALT 26 | Rightwards arrow, Z notation total function | Ω | ALT 234 | Greek capital letter omega |
← | ALT 27 | Leftwards arrow | δ | ALT 235 | Greek small letter delta |
↔ | ALT 29 | Left right arrow, Z notation relation | ∞ | ALT 236 | Infinity |
▲ | ALT 30 | Black up-pointing triangle | φ | ALT 237 | Greek small letter phi |
▼ | ALT 31 | Black down-pointing triangle | ε | ALT 238 | Greek small letter epsilon |
£ | ALT 156/0163 | Pound sign, pound sterling, Irish punt, lira sign | ≡ | ALT 240 | Identical to |
¥ | ALT 157/0165 | Yen sign, yuan sign | ± | ALT 241 | Plus-minus sign |
ƒ | ALT 159/0131 | Latin small letter f with hook, florin currency symbol, function symbol | ≥ | ALT 242 | Greater-than or equal to |
½ | ALT 171/0189 | Vulgar fraction one half | ≤ | ALT 243 | Less-than or equal to |
¼ | ALT 172/0188 | Vulgar fraction one quarter | ÷ | ALT 246 | Division sign, obelus |
« | ALT 174/0187 | Left-pointing double angle quotation mark, left guillemet, chevrons (in typography) | ≈ | ALT 247 | Almost equal to, asymptotic to |
» | ALT 175/0171 | Right-pointing double angle quotation mark, right guillemet | ° | ALT 248/0176 | Degree sign |
α | ALT 224 | Greek small letter alpha | √ | ALT 251 | Square root, radical sign |
ß | ALT 225 | Latin small letter sharp s, eszett | € | ALT 0128 | Euro sign |
Γ | ALT 226 | Greek capital letter gamma | ‰ | ALT 0137 | Per mille sign, per thousand |
π | ALT 227 | Greek small letter pi | © | ALT 0169 | Copyright sign |
Σ | ALT 228 | Greek capital letter sigma | ® | ALT 0174 | Registered sign |
完整的Alt码表格参见这里,也可以参见这份pdf文件。
对Unicode的支持
当Windows系统开始支持Unicode时,Alt码输入法也被要求能够支持所有的Unicode字符。Word
应用程序就会将大于255的Alt码对应到Unicode字符,但是其它的一些文本编辑器,例如Notepad
将会用Alt码对256取模的余数作为新的Alt码;而另外一些程序则会直接忽略第三位之后的Alt码;因此在这些程序中无法应用Alt码输入法输入Unicode字符。
因为Alt码是基于数字键盘的,因此所有的Alt码都是十进制的。但是大多数的Unicode文档以及Windows系统自带的Character Map
应用程序中都是以十六进制来显示字符的Unicode码,这给使用Alt码输入法带来了不便。用户要么自己将十六进制换算成十进制,要么去一些能够显示十进制的Unicode字符网站,例如https://unicodelookup.com/。
为此,Word
应用程序提供了一个小技巧,支持直接将Unicode编码(十六进制)转换成对应的Unicode字符。操作方法为输入字符的Unicode编码,然后按Alt + X
组合键即可。重复按Alt + X
组合键,Word
会将字符与其Unicode 编码值相互转换。
Alt-数字键盘输入法适用于带有专用数字键盘的PC,对于大多数不带数字键盘的笔记本电脑,这个输入法不适用。除非该笔记本电脑的某些按键可以用作数字键盘,如下图所示。