字符编码与字符集 — 输入法

输入法的需求是来源于键盘的限制。键盘原在打字机时代为英文字母而设计,但键盘只有一百多个键,在没有软件的帮助下它是无法输入中文或其他表意文字的字符。现在世界上多数的输入法软件是为汉语,韩语以及日语等东亚地区的文字而设计。除此之外,其它需求输入法的语言不是很普遍。一般用户把凡是从键盘上输入文字的软件都叫做输入法。即便是英语这样的语言,直接从键盘输入的过程也叫做输入法。这显然是不合适的,我们需要区别两种输入方法的不同之处。这两种一个叫做输入法,另一个叫做键盘布局。

输入法与键盘布局

输入法软件是一种协助用户和计算机沟通的软件,用户通过输入外码到输入法软件,输入法软件负责转换外码成为一个或多个字符,从而实现输入东亚地区语言的文字。在英语里,”输入法”(Input Method)指的是输入方式而不是所实现它的软件。早期,英语像中文一样没有对这两个概念进行区分。受Windows操作系统的影响,输入法软件被称为”输入法编辑器”(Input Method Editor, IME)。

键盘布局则是直接映射键盘的按键成为字母。对英文、法文、德文等西方文字来说,所有的字母都可在键盘上轻松地安排妥当。用户只需要按一个键或者一个组合键就可输入一个字母。即便对于英文而言,US和UK的键盘布局也是不同的。
keyboard-layout-us-uk

在中国境内销售的键盘大多是美式布局,然后在这个键盘布局上,我们再借助于像搜狗拼音输入法、五笔输入法等之类的输入法软件来实现中文的输入。在台湾、香港等使用繁体中文的地区来说,仓颉输入法、注音输入法则是主流。

汉字输入码/外码

汉字输入码也叫外码(外码是相对于内码来说的),是通过键盘字符把汉字输入计算机而设计的一种编码。输入英文时想输入什么字符便按什么键,外码和内码是一致的。而汉字输入则不同,可能要按几个键才能输入一个汉字。对于同一汉字而言,输入法不同,其外码也是不同的。目前常用的外码分为以下几类:

  1. 数字编码,比如区位码、GB内码;
  2. 拼音编码,比如全拼、双拼、自然码、注音等;
  3. 字形编码,比如五笔、笔画、郑码等。

这些不同的外码对应着不同的输入法。其中,区位码/GB内码、双拼、注音等输入法是我们不熟悉的,下面一一介绍。

区位码/GB内码输入法

区位码和GB内码是根据GB 2312以及GBK的标准而来的。在DOS时代,许多中文系统都实现了区位码和机内码输入法。在DOS被Windows系统取代后,拼音输入法、五笔输入法成为了主流的中文输入法,区位码和机内码输入法就很少有人使用了。Windows XP中还有区位码和机内码输入法,但到了Windows Vista就被移除了。

gb-input-method.gif Windows XP中的区位码/内码输入法

区位码是一种无重码、码长为4的数字码,使用区位码输入法时只要直接从键盘中输入4个由十进制数(0~9)的区位码即可输入汉字,其编码范围为0101-9494。在输入过程中当第四个数字输入后,在编辑屏幕的插入点立即显示出所键入的区位码所代表的汉字。

例如,汉字在第39区、第14位,因此键入3914即可输入
qian-location-code
gb-input-method-location-code
你也可以只输入区码,按空格后,输入法会列出该区所有的汉字,然后你可以用键盘选择或者使用鼠标点选。
gb-input-method-location-code-prompt

GB内码输入法与区位码输入法类似,只不过其编码范围为A1A1-FFFF

例如,汉字的内码为C7AE,因此键入C7AE即可输入
qian-internal-code
gb-input-method-internal-code
与区位输入法类似,你也可以只输入内码的前两位,按空格后,输入法会列出该内码范围内的所有汉字,然后你可以用键盘选择或者使用鼠标点选。
gb-input-method-internal-code-prompt

区位码和机内码输入法的优点就是无重码,没有使用拼音输入法时经常出现的候选字。当然缺点也是显而易见的,其编码难以记忆,大多数时候只能靠查表。对于录入特殊符号,如制表符、希腊字母或者发音、字形不规则的生僻字时,区位码和机内码输入法或许能派上用场。

关于中文字符编码的更多细节,请参阅字符编码与字符集 — 中文字符集

双拼输入法

双拼是拼音输入法的一种编码方案。相对于全拼而言,使用双拼输入汉字时只需输入一个代表声母的字母一个代表韵母的字母,就可以打出任意一个汉字了。目前Windows、macOS、Android、iOS平台上都有支持双拼的输入法,包括iOS系统自带输入法、 QQ输入法、百度输入法、搜狗输入法、谷歌输入法和微软必应输入法等。
shuang-pin

shuang-pin-sougou 搜狗拼音输入法中的双拼输入法

shuang-pin-iOS iOS中的双拼输入法

双拼编码方案

我们知道汉语拼音是由声母和韵母组成的。声母和韵母又可以划分为如下:

  1. 声母
    • 单声母,如 q、w、r、t 等,它们只有一个字符
    • 双声母,有3个,分别是 zh、ch、sh
    • 零声母,如啊(ā)
  2. 韵母
    • 单韵母,如 a、o、e、i、u 等,它们也只有一个字符
    • 非单韵母,如 ei、uan、en、an、ao、ing 等

双拼编码就是通过一定的规则把汉语拼音的声母和韵母分别对应到键盘上26个字母中的一个。对应规则可谓是仁者见仁智者见智,因此诞生了很多种不同的编码方案。

  • 对于单声母和单韵母,直接与键盘上的按键相对应
  • 对于双声母,使用某个单韵母的键与之对应,如自然码方案为 zh → v、ch → i、sh → u 。因为双拼的原则是第一个键为声母,所以用户如果在第一个键上按了韵母,那一定就是需要转换的双声母了。
  • 对于零声母,双拼中则需要把这个零声母补上:
    • 固定一个字母(字母O)做零声母 + 韵母所在键,如微软双拼、智能ABC、紫光双拼
    • 以韵母首字母为零声母 + 韵母所在键,如拼音加加
    • 单韵母、三韵母为韵母首字母 + 韵母所在键,双韵母为韵母首字母 + 韵母末字母(与全拼一致),如自然码、小鹤双拼

下面是一些流行的双拼方案键位图。
shuang-pin-schema-natural-code
shuang-pin-schema-xiaohe
shuang-pin-schema-sougou
shuang-pin-schema-microsoft

在搜狗双拼和微软双拼方案中,ü在Y键,ing在分号键。

在汉语拼音方案中,v是唯一一个没有被使用的英文字母,官方的解释是V用来拼写外来语、少数民族语言和方言。因此v在拼音输入法中常用作输入特殊符号的先导符,例如搜狗拼音全拼输入法中的V模式。由于英语种没有ü这个字母,大部分汉语拼音输入法以v代替ü进行键入。这也导致翻译人名时带ü的名字写成v,如写作了Lv;另外也有写成Lu的情况,容易与混淆。为解决这一问题,中华人民共和国自2012年5月15日起新发电子护照时,对姓名中的ü改写成yu,如写成Lyu写成Nyu

与全拼比较,双拼中由于拼音对应的字母与编码没有直观的联系,因此需要记忆键位(主要是韵母与按键的对应关系)后才能流畅使用。对于初学者,可以通过一些在线学习平台,不断的学习和练习双拼布局键位,慢慢可以达到对键位的熟悉。

注音输入法

注音输入法是输入繁体中文的主流输入法。作为一名80后,我印象中注音符号在小学课本中是有教的。新华字典以及一些在线汉语词典都会显示注音符号。
https://www.zdic.net/hans/%E9%92%B1

很多大陆地区的人看到注音符号以为是日文,其实不然。注音符号,简称注音,是标准汉语标音系统之一,以章太炎编创的“纽文”、“韵文”为蓝本,1912年由中华民国教育部制定、1918年正式发布,1930年改为现名。经过百年演变,现有37个字母(声母21个、介音3个及韵母13个)。中华民国自建国之初以来一直以注音符号为国语(现代标准汉语)的主要拼读工具,也是小学国语教育必修内容。中华人民共和国则在1958年推行汉语拼音方案前使用之。两岸分治这么久,但却丝毫没有影响相互间的语言沟通。这其中最重要的原因是,虽然汉字标音的符号不同,但发音确是基本相同的

zhuyin-vs-pinyin 注音与拼音的对照表

标准汉语标音系统有好几个方案,我们所熟知的汉语拼音只是其中之一,其它的还有:

  • 注音符号
  • 通用拼音
  • 威妥玛拼音
  • 国语罗马字
  • 台湾闽南语罗马字拼音方案

对于那些想输入繁体中文但又不熟悉注音输入法的人来说,现在完全可以采用拼音输入法来输入繁体中文。

键盘排列

注音符号的键盘排列方式有多种方式,有大千式、倚天41键式、倚天26键式、IBM式等。大千式是台湾使用最广的输入方式,Windows称之为标准式,是其默认的键盘排列方式。台湾市场上所出售的键盘,绝大多数亦印有此排列。
zhuyin-daqian 大千式注音输入法的键盘排列

iOS系统自带的注音输入法采用的也是大千式的键盘排列。
zhuyin-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 437Code Page 1252都是基于8比特的编码系统,因此Alt码的范围是0~255,例如:

  • Alt + 224,输出希腊字母α
  • Alt + 0224,则输出带有重音符号的à

下面是一些常用字符的Alt码:

CharacterALT CodeCharacter NameCharacterALT CodeCharacter Name
ALT 20Pilcrow sign, paragraph signσALT 229Greek small letter sigma
§ALT 21/0167Section signµALT 230Micro sign
ALT 23Up down arrow with baseτALT 231Greek capital letter tau
ALT 24Upwards arrowΦALT 232Greek capital letter phi
ALT 25Downwards arrowΘALT 233Greek capital letter theta
ALT 26Rightwards arrow, Z notation total functionΩALT 234Greek capital letter omega
ALT 27Leftwards arrowδALT 235Greek small letter delta
ALT 29Left right arrow, Z notation relationALT 236Infinity
ALT 30Black up-pointing triangleφALT 237Greek small letter phi
ALT 31Black down-pointing triangleεALT 238Greek small letter epsilon
£ALT 156/0163Pound sign, pound sterling, Irish punt, lira signALT 240Identical to
¥ALT 157/0165Yen sign, yuan sign±ALT 241Plus-minus sign
ƒALT 159/0131Latin small letter f with hook, florin currency symbol, function symbolALT 242Greater-than or equal to
½ALT 171/0189Vulgar fraction one halfALT 243Less-than or equal to
¼ALT 172/0188Vulgar fraction one quarter÷ALT 246Division sign, obelus
«ALT 174/0187Left-pointing double angle quotation mark, left guillemet, chevrons (in typography)ALT 247Almost equal to, asymptotic to
»ALT 175/0171Right-pointing double angle quotation mark, right guillemet°ALT 248/0176Degree sign
αALT 224Greek small letter alphaALT 251Square root, radical sign
ßALT 225Latin small letter sharp s, eszettALT 0128Euro sign
ΓALT 226Greek capital letter gammaALT 0137Per mille sign, per thousand
πALT 227Greek small letter pi©ALT 0169Copyright sign
ΣALT 228Greek capital letter sigma®ALT 0174Registered 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 编码值相互转换。
unicode-to-character

Alt-数字键盘输入法适用于带有专用数字键盘的PC,对于大多数不带数字键盘的笔记本电脑,这个输入法不适用。除非该笔记本电脑的某些按键可以用作数字键盘,如下图所示。
laptop-keyboard-with-numeric-keypad

相关链接