全角和半角是文字的两种显示形式,“全角”指文字字身长宽比为一比一的正方形,而“半角”为宽度为全角一半的文字。现在这两个词通常用来指代计算机中显示的文字。
在传统的字体排印学中,文字字身长宽比为1比1的正方形金属铅字原本称作“全身”,而宽度只有一半的称为“半身”。另外对于小于一个“全身”的各种铅空称为“分空”,通常称为“二分空”(注意不是“半身”)“三分空”“四分空”“六分空”等等。
“半角/全角”源于日文,其中“角”是“方块”的意思,“全角/半角”在日文里即是原本“正方形/半个正方形大小文字”的本意,与西文字体排印学中Em和En单位含义相同。
而中文里的“角”虽然有“角度”“角落”等含义,却没有“方块”的意思,中文在字体排印时不说“全角/半角”而说“全身/半身”。中文里说“半角/全角”是计算机文字编码技术引入时直接借用了日文的做法。
而当前对于计算机上的文字称作“全角字”“全角字”的指代非常混乱,可能是指 (1) 用两个字节存储的字符、(2) ASCII(所谓半角英文和数字)以外所有的字符、(3) 显示上字身宽度为一比一正方形的字形。
为了避免混乱,在使用“字宽”的本意时,可以使用从英文倒翻译回中文的“全宽/半宽”(fullwidth/halfwidth)。
而在早期的计算机中,英语或拉丁字母语言使用的系统,每一个字母或符号,都是使用一字节的空间(一字节由8比特组成,共256个编码空间)来储存;而汉语、日语及韩语文字,由于数量大大超过256个,故惯常使用两字节来储存一个字符。所以这原本是编码层面的“单字节”“双字节”的问题。
当时使用等宽字体(如DOS、部分文字编辑器等)时,字体也就顺应这种编码形式,将中日韩文字的宽度绘制成拉丁字母和数字的两倍,这样字符的编码存储和显示宽度可以一一对应起来,“单字节”文字显示成“半宽”,“双字节”文字显示成“全宽”。因此当时的用户就开始习惯称中、日、韩等文字为“全角字符”,而称拉丁字母或数字为“半角字符”。
但是,后来计算机的文字编码技术已经发生很大变化,存储一个字符可能用一个、两个、四个或者更多的字节。一个英文字符即使显示为半宽,依照不同的编码方式,并不一定是用一个字节存储;而日文的片假名也不一定是双字节,也可能用一个字节存储(即“半角片假名”)。因此,现在字符编码存储和字符显示宽度的已经没有一一对应关系。
但是由于字符编码和字形宽度曾经的对应关系,很多用户一直习惯性地使用“全角/半角”词汇。“全角字”“全角字”可能是指 (1) 用两个字节存储的字符、(2) ASCII(所谓半角英文和数字)以外所有的字符、(3) 显示上字身宽度为一比一正方形的字形。
而在说“半角字”“半角字”时可能指 (1) 用单字节存储的字符(可能包括片假名)、(2) ASCII 字符即拉丁字母、数字和常见符号(而事实上并不一定是用单字节存储,根据不同的字体会显示成全宽、或者是西文的“比例宽度”而并不是正好“半宽”)、(3) 显示上字身宽度为字体高度一半的字形)。
Unicode 标准的附件11 (UAX#11) 中以信息性附件 (informative) 的形式,定义了东亚文字的字宽 East_Asian_Width 特性。
OpenType字体格式里定义了fwid
、halt
、hwid
和vhal
等GSUB
特性,可以为同样一个编码(码位)的字符供替换成不同的字形(显示形式)。