全形和半形

全角半角是文字的兩種顯示形式,「全角」指文字字身長寬比為一比一的正方形,而「半角」為寬度為全角一半的文字。現在這兩個詞通常用來指代計算機中顯示的文字。

fullwidth」的各地常用名稱
中國大陸全角
港澳臺全形
日韓全角
halfwidth」的各地常用名稱
中國大陸半角
港澳臺半形
日韓半角
Windows命令提示符中顯示的全角和半角字符。

意義和用法

在傳統的字體排印學中,文字字身長寬比為1比1的正方形金屬鉛字原本稱作「全身」,而寬度只有一半的稱為「半身」。另外對於小於一個「全身」的各種鉛空稱為「分空」,通常稱為「二分空」(注意不是「半身」)「三分空」「四分空」「六分空」等等。

「半角/全角」源於日文,其中「角」是「方塊」的意思,「全角/半角」在日文里即是原本「正方形/半個正方形大小文字」的本意,與西文字體排印學中EmEn單位含義相同。

而中文裡的「角」雖然有「角度」「角落」等含義,卻沒有「方塊」的意思,中文在字體排印時不說「全角/半角」而說「全身/半身」[來源請求]。中文裡說「半角/全角」是計算機文字編碼技術引入時直接借用了日文的做法[1]

而目前對於計算機上的文字稱作「全角字」「全形字」和「半角字」「半形字」的指代非常混亂。

「全角字」「全形字」可能是指:

  1. 用兩個字節存儲的字符
  2. ASCII(所謂半角拉丁字母、符號及阿拉伯數字)以外所有的字符
  3. 顯示上字身寬度與字體高度相等(即字形外框為正方形)的字形

「半角字」「半形字」時可能指:

  1. 用單字節存儲的字符(可能包括片假名)
  2. ASCII 字符即拉丁字母、數字和常見符號[註1]
  3. 顯示上字身寬度為字體高度一半的字形

為了避免混亂,在使用「字寬」的本意時,可以使用從英文倒翻譯回中文的「全寬/半寬」(fullwidth / halfwidth)。

歷史

在早期的計算機中,英語拉丁字母語言使用的系統,每一個字母符號,都是使用一字節的空間(一字節由8位元組成,共256個編碼空間)來儲存;而漢語日語韓語文字,由於數量大大超過256個,故慣常使用兩字節來儲存一個字符。所以這原本是編碼層面的「單字節」「雙字節」的問題。

當時使用等寬字體(如DOS、部分文字編輯器等)時,字體也就順應這種編碼形式,將中日韓文字的寬度繪製成拉丁字母和數字的兩倍,這樣字符的編碼存儲和顯示寬度可以一一對應起來,「單字節」文字顯示成「半寬」,「雙字節」文字顯示成「全寬」。因此當時的用戶就開始習慣稱中、日、韓等文字為「全形字符」,而稱拉丁字母或數字為「半形字符」。

但是,後來計算機的文字編碼技術已經發生很大變化,存儲一個字符可能用一個、兩個、三個或者四個字節(如UTF-8)。一個英文字符即使顯示為半寬,依照不同的編碼方式,並不一定是用一個字節存儲;而日文的片假名也不一定是雙字節,也可能用一個字節存儲(即「半角片假名」)。因此,現在字符編碼存儲和字符顯示寬度的已經沒有一一對應關係。但是由於字符編碼和字形寬度曾經的對應關係,很多用戶一直習慣性地使用「全角/半角」詞彙。

Unicode 裏的 East_Asian_Width 特性

Unicode 標準的附件11 (UAX#11) 中以信息性附件 (informative) 的形式,定義了東亞文字的字寬 East_Asian_Width 特性[3]

縮寫 名稱 描述
W Wide(寬) 自然的寬字符,如平假名
Na Narrow(窄) 自然的窄字符,如 ISO 基本拉丁字母
F Fullwidth(全寬) 與自然的窄字符具有Unicode等價性的寬式變體,比如全寬拉丁字母。
H Halfwidth(半寬) 與自然的寬字符具有Unicode等價性的窄式變體,如半角假名,包括 U+20A9(韓元符號[註2]
A Ambiguous(模糊) 在東亞雙位元組字元集和歐洲單字節字元集中都有的編碼的字符,如希臘字母,因此字寬行為會有所不同。
N Neutral(中性) 沒有出現在東亞雙位元組字元集編碼中的字符,如天城文字母。

半形字符與全形字符的比較

ASCII字符

半形字符與全形字符的比較(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
0x7B U+FF5B { U+007B
0x7C U+FF5C | U+007C
0x7D U+FF5D } U+007D
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字體格式里定義了fwidhalthwidvhalGSUB特性,可以為同樣一個編碼(碼位)的字符供替換成不同的字形(顯示形式)。

參見

註釋

    註:

  1. ^ 事實上並不一定是用單字節存儲,根據不同的字體會顯示成全寬、或者是西文的「比例寬度」而並不是正好「半寬」。
  2. ^ Unicode定義U+20A9為半寬字符,與之相應的是全寬韓元符號(U+FFE6)。韓元字符源自拉丁字母「W」,本應效仿源自拉丁字母「Y」的日元符號(¥,U+00A5)定義為自然窄字符,故而得以派生出全寬符號。半寬字符應由自然寬字符縮窄成半寬而來,但半寬韓元符號並無對應的自然寬字符,加之U+20A9所處的貨幣符號區塊均為自然窄字符,多數字型將U+20A9也視作自然窄字符,而不遵循其半寬限制。

參考資料

外部連結