跳到主要内容
LeedyBox
支持我们

全角和半角字符的区别

“ABC123”和“ABC123”看起来几乎一样,对计算机来说却是不同的字符。本指南说明全角、半角字符的来历,表单和搜索中常见的问题,中文标点在转换时的特殊之处,日文半角片假名如何用两个字符写出“ガ”,以及看起来像却并不成对的字符。

为什么会有两种宽度

在中文、日文和韩文中,每个字占一个方格。早期的东亚字符集除了汉字,还收录了一套占满整个方格的拉丁字母、数字和符号,这就是全角字符;而英文字母和数字原本只占半个方格,这就是半角字符。日本的 JIS X 0201 还收录了只占半格的片假名。

为了让旧数据可以无损转换,Unicode 两套都保留了下来。全角 ASCII 字符(U+FF01–FF5E)和半角片假名(U+FF61–FF9F)位于“Halfwidth and Fullwidth Forms”区块,Unicode 字符数据库记录了每个字符对应哪个普通字符,转换工具就是按这份记录来转换的。

有全角和半角两种形式的字符

类型全角半角
字母ABC abcABC abc
数字01230123
标点和符号,!?:;()@#,!?:;()@#
空格U+3000(全角空格)U+0020
货币等符号¥ ¢ £¥ ¢ £
日文片假名カタカナ ガ パカタカナ ガ パ
中日文标点。「」、・。「」、・(日文半角形式)

汉字、平假名和韩文音节只有一种宽度,没有半角形式。

中文标点:哪些能转成英文标点

中文常用的“,!?:;()”正是 ASCII 符号的全角形式,所以转成半角后就是英文的 , ! ? : ; ( )。但“。”“、”“《》”“【】”以及中文引号“ ”‘ ’是中日文专用的标点,Unicode 中并没有对应的英文标点:“。”只对应日文的半角“。”,而不是英文句点“.”。如果系统要求英文标点,这些需要手动替换。

全角、半角会在哪里出问题

  • 表单。只接受数字的输入框会拒绝“138”。从网页或文档复制来的手机号、邮编、身份证号如果是全角,转成半角就能通过。
  • 搜索和去重。搜索 ABC 不一定能找到 ABC,客户名单里也可能因为宽度不同把同一个名字存了两次。
  • 排版。英文里夹着全角字母会显得很松散,中文里夹着半角标点则显得拥挤。
  • 程序和数据。编号、网址、邮箱地址和代码中的全角字符往往会导致错误,最好统一成半角。

日文半角片假名与浊音符号

半角片假名没有单独的浊音、半浊音字母。“ガ”写成“カ”加浊音符号“゙”两个字符,“パ”写成“ハ”加半浊音符号“゚”两个字符。正确的转换工具在转成全角时把两个字符合成一个,转成半角时再拆开,所以字数会变化:“ガッコウ”是五个字符,“ガッコウ”是四个。

看起来像却不成对的字符

字符是什么有半角对应吗
~(U+FF5E)全角波浪号有:~
〜(U+301C)波浪线(日文标点)没有
-(U+FF0D)全角连字符减号有:-
—(U+2014)破折号没有
" '全角直引号有:" '
“ ” ‘ ’弯引号没有

平假名和片假名

从“ぁ”到“ゖ”的每个平假名都有同名的片假名,在 Unicode 中相隔正好 96 个码位,所以可以准确互转:“やまだ たろう”变成“ヤマダ タロウ”。长音符号“ー”两种假名都用,保持不变。

给程序员:规范化会改得更多

Unicode 规范化形式 NFKC 也会把全角字母转成半角,并把“ガ”合成“ガ”,但同时会改动许多其他字符:“①”变成“1”,“№”变成“No”,“㈱”变成“(株)”。如果你只想改变宽度,就只转换全角、半角成对的字符,其余保持不变。

常见问题

中文里的数字应该用全角还是半角?

两种都有人用,出版社和机关也有各自的规定。同一份文档里保持一致,并遵守表单或出版方的要求即可。

转成半角会改变汉字吗?

不会。汉字、平假名和韩文没有半角形式,保持不变。

全角空格等于两个半角空格吗?

不等于。全角空格(U+3000)是一个占一个汉字宽度的字符,转换后变成一个普通空格。

为什么“。”转半角后变成了“。”?

因为在 Unicode 中“。”只和日文的半角句号“。”成对,这一对归在“片假名”选项里。只转换字母、数字和标点符号时,不勾选“片假名”,“。”就会保持不变。