全形和半形

全角和半角是文字的两种显示形式，“全角”指文字字身长宽比为一比一的正方形，而“半角”为宽度为全角一半的文字。现在这两个词通常用来指代计算机中显示的文字。

## 意义和用法

在传统的字体排印学中，文字字身长宽比为1比1的正方形金属铅字原本称作“全身”，而宽度只有一半的称为“半身”。另外对于小于一个“全身”的各种铅空称为“分空”，通常称为“二分空”（注意不是“半身”）、“三分空”、“四分空”、“六分空”等等。

“半角／全角”源于日文，其中“角”是“方块”的意思，“全角／半角”在日文里即是原本“正方形／半个正方形大小文字”的本意，与西文字体排印学中Em和En单位含义相同。

而中文里的“角”虽然有“角度”“角落”等含义，却没有“方块”的意思，中文在字体排印时不说“全角／半角”而说“全身／半身”。中文里说“半角／全角”是计算机文字编码技术引入时直接借用了日文的做法。

而目前对于计算机上的文字称作“全角字”和“半角字”的指代非常混乱。

“全角字”可能是指：

- 用两个字节存储的字符
- ASCII（所谓半角拉丁字母、符号及阿拉伯数字）以外所有的字符
- 显示上字身宽度与字体高度相等（即字形外框为正方形）的字形

“半角字”时可能指：

- 用单字节存储的字符（可能包括片假名）
- ASCII 字符即拉丁字母、数字和常见符号
- 显示上字身宽度为字体高度一半的字形

为了避免混乱，在使用“字宽”的本意时，可以使用从英文倒翻译回中文的“全宽／半宽”（fullwidth／halfwidth）。

## 历史

在早期的计算机中，英语或拉丁字母语言使用的系统，每一个字母或符号，都是使用一字节的空间（一字节由8字节成，共256个编码空间）来储存；而汉语、日语及韩语文字，由于数量大大超过256个，故惯常使用两字节来储存一个字符。所以这原本是编码层面的“单字节”“双字节”的问题。

当时使用等宽字体（如DOS、部分文字编辑器等）时，字体也就顺应这种编码形式，将中日韩文字的宽度绘制成拉丁字母和数字的两倍，这样字符的编码存储和显示宽度可以一一对应起来，“单字节”文字显示成“半宽”，“双字节”文字显示成“全宽”。因此当时的用户就开始习惯称中、日、韩等文字为“全形字符”，而称拉丁字母或数字为“半形字符”。

但是，后来计算机的字符编码技术已经发生很大变化，存储一个字符可能用一个、两个、三个或者四个字节（如UTF-8）。一个英文字符即使显示为半宽，依照不同的编码方式，并不一定是用一个字节存储；而日文的片假名也不一定是双字节，也可能用一个字节存储（即“半角片假名”）。因此，现在字符编码存储和字符显示宽度的已经没有一一对应关系。但是由于字符编码和字形宽度曾经的对应关系，很多用户一直习惯性地使用“全角／半角”词汇。

## Unicode里的East_Asian_Width特性

Unicode 标准的附件11（UAX#11）中以信息性附件（informative）的形式，定义了东亚文字的字宽East_Asian_Width特性。

缩写｜名称｜描述

W｜Wide（宽）｜自然的宽字符，如平假名。

Na｜Narrow（窄）｜自然的窄字符，如 ISO 基本拉丁字母。

F｜Fullwidth（全宽）｜与自然的窄字符具有Unicode等价性的宽式变体，比如全宽拉丁字母。

H｜Halfwidth（半宽）｜与自然的宽字符具有Unicode等价性的窄式变体，如半角假名，包括 U+20A9（韩元符号）。

A｜Ambiguous（模糊）｜在东亚双字节字元集和欧洲单字节字元集中都有的编码的字符，如希腊字母，因此字宽行为会有所不同。

N｜Neutral（中性）｜没有出现在东亚双字节字元集编码中的字符，如天城文字母。

## 半形字符与全形字符的比较

### ASCII字符

ASCII｜全形字符｜Unicode｜半形字符｜Unicode

`0x20`｜" "｜`U+3000`｜" "｜`U+0020`

`0x21`｜！｜`U+FF01`｜`U+0021`

`0x22`｜＂｜`U+FF02`｜"｜`U+0022`

`0x23`｜＃｜`U+FF03`｜#｜`U+0023`

`0x24`｜＄｜`U+FF04`｜$｜`U+0024`

`0x25`｜％｜`U+FF05`｜%｜`U+0025`

`0x26`｜＆｜`U+FF06`｜&｜`U+0026`

`0x27`｜＇｜`U+FF07`｜'｜`U+0027`

`0x28`｜（｜`U+FF08`｜(｜`U+0028`

`0x29`｜）｜`U+FF09`｜)｜`U+0029`

`0x2A`｜＊｜`U+FF0A`｜、｜`U+002A`

`0x2B`｜＋｜`U+FF0B`｜+｜`U+002B`

`0x2C`｜，｜`U+FF0C`｜,｜`U+002C`

`0x2D`｜－｜`U+FF0D`｜`U+002D`

`0x2E`｜．｜`U+FF0E`｜.｜`U+002E`

`0x2F`｜／｜`U+FF0F`｜/｜`U+002F`

`0x30`｜０｜`U+FF10`｜0｜`U+0030`

`0x31`｜１｜`U+FF11`｜1｜`U+0031`

`0x32`｜２｜`U+FF12`｜2｜`U+0032`

`0x33`｜３｜`U+FF13`｜3｜`U+0033`

`0x34`｜４｜`U+FF14`｜4｜`U+0034`

`0x35`｜５｜`U+FF15`｜5｜`U+0035`

`0x36`｜６｜`U+FF16`｜6｜`U+0036`

`0x37`｜７｜`U+FF17`｜7｜`U+0037`

`0x38`｜８｜`U+FF18`｜8｜`U+0038`

`0x39`｜９｜`U+FF19`｜9｜`U+0039`

`0x3A`｜：｜`U+FF1A`｜:｜`U+003A`

`0x3B`｜；｜`U+FF1B`｜;｜`U+003B`

`0x3C`｜＜｜`U+FF1C`｜<｜`U+003C`

`0x3D`｜＝｜`U+FF1D`｜=｜`U+003D`

`0x3E`｜＞｜`U+FF1E`｜>｜`U+003E`

`0x3F`｜？｜`U+FF1F`｜?｜`U+003F`

`0x40`｜＠｜`U+FF20`｜@｜`U+0040`

`0x41`｜Ａ｜`U+FF21`｜A｜`U+0041`

`0x42`｜Ｂ｜`U+FF22`｜B｜`U+0042`

`0x43`｜Ｃ｜`U+FF23`｜C｜`U+0043`

`0x44`｜Ｄ｜`U+FF24`｜D｜`U+0044`

`0x45`｜Ｅ｜`U+FF25`｜E｜`U+0045`

`0x46`｜Ｆ｜`U+FF26`｜F｜`U+0046`

`0x47`｜Ｇ｜`U+FF27`｜G｜`U+0047`

`0x48`｜Ｈ｜`U+FF28`｜H｜`U+0048`

`0x49`｜Ｉ｜`U+FF29`｜I｜`U+0049`

`0x4A`｜Ｊ｜`U+FF2A`｜J｜`U+004A`

`0x4B`｜Ｋ｜`U+FF2B`｜K｜`U+004B`

`0x4C`｜Ｌ｜`U+FF2C`｜L｜`U+004C`

`0x4D`｜Ｍ｜`U+FF2D`｜M｜`U+004D`

`0x4E`｜Ｎ｜`U+FF2E`｜N｜`U+004E`

`0x4F`｜Ｏ｜`U+FF2F`｜O｜`U+004F`

`0x50`｜Ｐ｜`U+FF30`｜P｜`U+0050`

`0x51`｜Ｑ｜`U+FF31`｜Q｜`U+0051`

`0x52`｜Ｒ｜`U+FF32`｜R｜`U+0052`

`0x53`｜Ｓ｜`U+FF33`｜S｜`U+0053`

`0x54`｜Ｔ｜`U+FF34`｜T｜`U+0054`

`0x55`｜Ｕ｜`U+FF35`｜U｜`U+0055`

`0x56`｜Ｖ｜`U+FF36`｜V｜`U+0056`

`0x57`｜Ｗ｜`U+FF37`｜W｜`U+0057`

`0x58`｜Ｘ｜`U+FF38`｜X｜`U+0058`

`0x59`｜Ｙ｜`U+FF39`｜Y｜`U+0059`

`0x5A`｜Ｚ｜`U+FF3A`｜Z｜`U+005A`

`0x5B`｜［｜`U+FF3B`｜`U+005B`

`0x5C`｜＼｜`U+FF3C`｜\｜`U+005C`

`0x5D`｜］｜`U+FF3D`｜`U+005D`

`0x5E`｜＾｜`U+FF3E`｜^｜`U+005E`

`0x5F`｜＿｜`U+FF3F`｜_｜`U+005F`

`0x60`｜｀｜`U+FF40`｜`｜`U+0060`

`0x61`｜ａ｜`U+FF41`｜a｜`U+0061`

`0x62`｜ｂ｜`U+FF42`｜b｜`U+0062`

`0x63`｜ｃ｜`U+FF43`｜c｜`U+0063`

`0x64`｜ｄ｜`U+FF44`｜d｜`U+0064`

`0x65`｜ｅ｜`U+FF45`｜e｜`U+0065`

`0x66`｜ｆ｜`U+FF46`｜f｜`U+0066`

`0x67`｜ｇ｜`U+FF47`｜g｜`U+0067`

`0x68`｜ｈ｜`U+FF48`｜h｜`U+0068`

`0x69`｜ｉ｜`U+FF49`｜i｜`U+0069`

`0x6A`｜ｊ｜`U+FF4A`｜j｜`U+006A`

`0x6B`｜ｋ｜`U+FF4B`｜k｜`U+006B`

`0x6C`｜ｌ｜`U+FF4C`｜l｜`U+006C`

`0x6D`｜ｍ｜`U+FF4D`｜m｜`U+006D`

`0x6E`｜ｎ｜`U+FF4E`｜n｜`U+006E`

`0x6F`｜ｏ｜`U+FF4F`｜o｜`U+006F`

`0x70`｜ｐ｜`U+FF50`｜p｜`U+0070`

`0x71`｜ｑ｜`U+FF51`｜q｜`U+0071`

`0x72`｜ｒ｜`U+FF52`｜r｜`U+0072`

`0x73`｜ｓ｜`U+FF53`｜s｜`U+0073`

`0x74`｜ｔ｜`U+FF54`｜t｜`U+0074`

`0x75`｜ｕ｜`U+FF55`｜u｜`U+0075`

`0x76`｜ｖ｜`U+FF56`｜v｜`U+0076`

`0x77`｜ｗ｜`U+FF57`｜w｜`U+0077`

`0x78`｜ｘ｜`U+FF58`｜x｜`U+0078`

`0x79`｜ｙ｜`U+FF59`｜y｜`U+0079`

`0x7A`｜ｚ｜`U+FF5A`｜z｜`U+007A`

`0x7E`｜～｜`U+FF5E`｜~｜`U+007E`

### 日文字符

JIS X 0201｜半形字符｜Unicode｜全形字符｜Unicode

`0xA1`｜｡｜`U+FF61`｜。｜`U+3002`

`0xA2`｜“｜`U+FF62`｜“｜`U+300C`

`0xA3`｜”｜`U+FF63`｜”｜`U+300D`

`0xA4`｜､｜`U+FF64`｜、｜`U+3001`

`0xA5`｜･｜`U+FF65`｜・｜`U+30FB`

`0xA6`｜ｦ｜`U+FF66`｜ヲ｜`U+30F2`

`0xA7`｜ｧ｜`U+FF67`｜ァ｜`U+30A1`

`0xA8`｜ｨ｜`U+FF68`｜ィ｜`U+30A3`

`0xA9`｜ｩ｜`U+FF69`｜ゥ｜`U+30A5`

`0xAA`｜ｪ｜`U+FF6A`｜ェ｜`U+30A7`

`0xAB`｜ｫ｜`U+FF6B`｜ォ｜`U+30A9`

`0xAC`｜ｬ｜`U+FF6C`｜ャ｜`U+30E3`

`0xAD`｜ｭ｜`U+FF6D`｜ュ｜`U+30E5`

`0xAE`｜ｮ｜`U+FF6E`｜ョ｜`U+30E7`

`0xAF`｜ｯ｜`U+FF6F`｜ッ｜`U+30C3`

`0xB0`｜ｰ｜`U+FF70`｜ー｜`U+30FC`

`0xB1`｜ｱ｜`U+FF71`｜ア｜`U+30A2`

`0xB2`｜ｲ｜`U+FF72`｜イ｜`U+30A4`

`0xB3`｜ｳ｜`U+FF73`｜ウ｜`U+30A6`

`0xB4`｜ｴ｜`U+FF74`｜エ｜`U+30A8`

`0xB5`｜ｵ｜`U+FF75`｜オ｜`U+30AA`

`0xB6`｜ｶ｜`U+FF76`｜カ｜`U+30AB`

`0xB7`｜ｷ｜`U+FF77`｜キ｜`U+30AD`

`0xB8`｜ｸ｜`U+FF78`｜ク｜`U+30AF`

`0xB9`｜ｹ｜`U+FF79`｜ケ｜`U+30B1`

`0xBA`｜ｺ｜`U+FF7A`｜コ｜`U+30B3`

`0xBB`｜ｻ｜`U+FF7B`｜サ｜`U+30B5`

`0xBC`｜ｼ｜`U+FF7C`｜シ｜`U+30B7`

`0xBD`｜ｽ｜`U+FF7D`｜ス｜`U+30B9`

`0xBE`｜ｾ｜`U+FF7E`｜セ｜`U+30BB`

`0xBF`｜ｿ｜`U+FF7F`｜ソ｜`U+30BD`

`0xC0`｜ﾀ｜`U+FF80`｜タ｜`U+30BF`

`0xC1`｜ﾁ｜`U+FF81`｜チ｜`U+30C1`

`0xC2`｜ﾂ｜`U+FF82`｜ツ｜`U+30C4`

`0xC3`｜ﾃ｜`U+FF83`｜テ｜`U+30C6`

`0xC4`｜ﾄ｜`U+FF84`｜ト｜`U+30C8`

`0xC5`｜ﾅ｜`U+FF85`｜ナ｜`U+30CA`

`0xC6`｜ﾆ｜`U+FF86`｜ニ｜`U+30CB`

`0xC7`｜ﾇ｜`U+FF87`｜ヌ｜`U+30CC`

`0xC8`｜ﾈ｜`U+FF88`｜ネ｜`U+30CD`

`0xC9`｜ﾉ｜`U+FF89`｜ノ｜`U+30CE`

`0xCA`｜ﾊ｜`U+FF8A`｜ハ｜`U+30CF`

`0xCB`｜ﾋ｜`U+FF8B`｜ヒ｜`U+30D2`

`0xCC`｜ﾌ｜`U+FF8C`｜フ｜`U+30D5`

`0xCD`｜ﾍ｜`U+FF8D`｜ヘ｜`U+30D8`

`0xCE`｜ﾎ｜`U+FF8E`｜ホ｜`U+30DB`

`0xCF`｜ﾏ｜`U+FF8F`｜マ｜`U+30DE`

`0xD0`｜ﾐ｜`U+FF90`｜ミ｜`U+30DF`

`0xD1`｜ﾑ｜`U+FF91`｜ム｜`U+30E0`

`0xD2`｜ﾒ｜`U+FF92`｜メ｜`U+30E1`

`0xD3`｜ﾓ｜`U+FF93`｜モ｜`U+30E2`

`0xD4`｜ﾔ｜`U+FF94`｜ヤ｜`U+30E4`

`0xD5`｜ﾕ｜`U+FF95`｜ユ｜`U+30E6`

`0xD6`｜ﾖ｜`U+FF96`｜ヨ｜`U+30E8`

`0xD7`｜ﾗ｜`U+FF97`｜ラ｜`U+30E9`

`0xD8`｜ﾘ｜`U+FF98`｜リ｜`U+30EA`

`0xD9`｜ﾙ｜`U+FF99`｜ル｜`U+30EB`

`0xDA`｜ﾚ｜`U+FF9A`｜レ｜`U+30EC`

`0xDB`｜ﾛ｜`U+FF9B`｜ロ｜`U+30ED`

`0xDC`｜ﾜ｜`U+FF9C`｜ワ｜`U+30EF`

`0xDD`｜ﾝ｜`U+FF9D`｜ン｜`U+30F3`

`0xDE`｜ﾞ｜`U+FF9E`｜゛｜`U+309B`

`0xDF`｜ﾟ｜`U+FF9F`｜゜｜`U+309C`

### 韩文字符

半形字符｜Unicode｜全形字符｜Unicode

ﾠ｜`U+FFA0`｜ㅤ｜`U+3164`

ﾡ｜`U+FFA1`｜ㄱ｜`U+3131`

ﾢ｜`U+FFA2`｜ㄲ｜`U+3132`

ﾣ｜`U+FFA3`｜ㄳ｜`U+3133`

ﾤ｜`U+FFA4`｜ㄴ｜`U+3134`

ﾥ｜`U+FFA5`｜ㄵ｜`U+3135`

ﾦ｜`U+FFA6`｜ㄶ｜`U+3136`

ﾧ｜`U+FFA7`｜ㄷ｜`U+3137`

ﾨ｜`U+FFA8`｜ㄸ｜`U+3138`

ﾩ｜`U+FFA9`｜ㄹ｜`U+3139`

ﾪ｜`U+FFAA`｜ㄺ｜`U+313A`

ﾫ｜`U+FFAB`｜ㄻ｜`U+313B`

ﾬ｜`U+FFAC`｜ㄼ｜`U+313C`

ﾭ｜`U+FFAD`｜ㄽ｜`U+313D`

ﾮ｜`U+FFAE`｜ㄾ｜`U+313E`

ﾯ｜`U+FFAF`｜ㄿ｜`U+313F`

ﾰ｜`U+FFB0`｜ㅀ｜`U+3140`

ﾱ｜`U+FFB1`｜ㅁ｜`U+3141`

ﾲ｜`U+FFB2`｜ㅂ｜`U+3142`

ﾳ｜`U+FFB3`｜ㅃ｜`U+3143`

ﾴ｜`U+FFB4`｜ㅄ｜`U+3144`

ﾵ｜`U+FFB5`｜ㅅ｜`U+3145`

ﾶ｜`U+FFB6`｜ㅆ｜`U+3146`

ﾷ｜`U+FFB7`｜ㅇ｜`U+3147`

ﾸ｜`U+FFB8`｜ㅈ｜`U+3148`

ﾹ｜`U+FFB9`｜ㅉ｜`U+3149`

ﾺ｜`U+FFBA`｜ㅊ｜`U+314A`

ﾻ｜`U+FFBB`｜ㅋ｜`U+314B`

ﾼ｜`U+FFBC`｜ㅌ｜`U+314C`

ﾽ｜`U+FFBD`｜ㅍ｜`U+314D`

ﾾ｜`U+FFBE`｜ㅎ｜`U+314E`

ￂ｜`U+FFC2`｜ㅏ｜`U+314F`

ￃ｜`U+FFC3`｜ㅐ｜`U+3150`

ￄ｜`U+FFC4`｜ㅑ｜`U+3151`

ￅ｜`U+FFC5`｜ㅒ｜`U+3152`

ￆ｜`U+FFC6`｜ㅓ｜`U+3153`

ￇ｜`U+FFC7`｜ㅔ｜`U+3154`

ￊ｜`U+FFCA`｜ㅕ｜`U+3155`

ￋ｜`U+FFCB`｜ㅖ｜`U+3156`

ￌ｜`U+FFCC`｜ㅗ｜`U+3157`

ￍ｜`U+FFCD`｜ㅘ｜`U+3158`

ￎ｜`U+FFCE`｜ㅙ｜`U+3159`

ￏ｜`U+FFCF`｜ㅚ｜`U+315A`

ￒ｜`U+FFD2`｜ㅛ｜`U+315B`

ￓ｜`U+FFD3`｜ㅜ｜`U+315C`

ￔ｜`U+FFD4`｜ㅝ｜`U+315D`

ￕ｜`U+FFD5`｜ㅞ｜`U+315E`

ￖ｜`U+FFD6`｜ㅟ｜`U+315F`

ￗ｜`U+FFD7`｜ㅠ｜`U+3160`

ￚ｜`U+FFDA`｜ㅡ｜`U+3161`

ￛ｜`U+FFDB`｜ㅢ｜`U+3162`

ￜ｜`U+FFDC`｜ㅣ｜`U+3163`

### 其他字符

半形字符｜Unicode｜全形字符｜Unicode

⦅｜`U+2985`｜｟｜`U+FF5F`

⦆｜`U+2986`｜｠｜`U+FF60`

¢｜`U+00A2`｜￠｜`U+FFE0`

£｜`U+00A3`｜￡｜`U+FFE1`

¬｜`U+00AC`｜￢｜`U+FFE2`

¯｜`U+00AF`｜￣｜`U+FFE3`

¦｜`U+00A6`｜￤｜`U+FFE4`

¥｜`U+00A5`｜￥｜`U+FFE5`

₩｜`U+20A9`｜￦｜`U+FFE6`

￨｜`U+FFE8`｜│｜`U+2502`

￩｜`U+FFE9`｜←｜`U+2190`

￪｜`U+FFEA`｜↑｜`U+2191`

￫｜`U+FFEB`｜→｜`U+2192`

￬｜`U+FFEC`｜↓｜`U+2193`

￭｜`U+FFED`｜■｜`U+25A0`

￮｜`U+FFEE`｜○｜`U+25CB`

⟨｜`U+27E8`｜〈｜`U+3008`

⟩｜`U+27E9`｜〉｜`U+3009`

⟪｜`U+27EA`｜《｜`U+300A`

⟫｜`U+27EB`｜》｜`U+300B`

⟬｜`U+27EC`｜〘｜`U+3018`

⟭｜`U+27ED`｜〙｜`U+3019`

⟦｜`U+27E6`｜〚｜`U+301A`

⟧｜`U+27E7`｜〛｜`U+301B`

## OpenType

OpenType字体格式里定义了`fwid`、`halt`、`hwid`和`vhal`等`GSUB`特性，可以为同样一个编码（码位）的字符供替换成不同的字形（显示形式）。

## 外部链接

- East Asian Width Unicode Standard Annex #11