输入法中的全角与半角

问:输入法为什么有全角半角之分

 

这要从发展史说起:
1. 二进制
计算机普遍遵循冯诺依曼结构体系,它规定了计算机内部以二进制为主要数制(这和电路有关),所以计算机只认识二进制的0或1。其它符号比如十进制的[2-9],字母[a-zA-Z],标点符号,中文等等是不认识的。那么,当我们说"a"的时候,它是怎么理解的呢?

2. 编码表
即然计算机只认识01符号,那我们就可以建立一套"映射系统",比如
a <--> 00000001
b <--> 00000010
c <--> 00000011
当我们说"a"的时候,计算机就理解为"00000001",即一个符号,用一串唯一的二进制表示,这套"映射系统"就称为编码表。

3. ASCII编码表
因为早期的计算机只在发达的欧美国家使用,所以这套"映射系统"是根据英文规则设计的,叫ASCII表,规定用8位长度的二进制表示一个字符,最多可以表示 2^8 = 256 个字符。ASCII表涵盖了英文字母,数字,和常用的英文符号,比如",.+-"等,
可普通汉字就有6万多个,很明显8位的ASCII编码方案满足不了中文系统的要求,比如中文 "啊"就无法用ASCII表示。

4. 中文编码表
由上我们知道,只要再设计一套长度更大的"映射系统"就可以解决问题了,比如
啊 = 00000000 00000001
哦 = 00000000 00000010
即使用16位二进制(两字节)表示一个汉字,最多可表示 2^16 = 65536 个。
早期中文系统设计的时候,是用GB2312标准,但这套标准有部分的汉字,符号,少数民族用语是没有映射过去的,比如在GB2312中就打不出“镕"字,所以往后就出了编码范围更大的编码表,如GBK,GB18030。这些编码表只有一个区别,就是能表示的汉字或符号范围越来越大了,但相应的,需要映射的二进制位数也越来越大了,即汉字可能需要用2-4位字节(16-32位二进制)表示,存储成本增加了。

5. 全角与半角
综上,我们知道
5.1 计算机只认识二进制01,所有的字形符号都是通过编码表(映射系统)翻译实现的
5.2 在英文系统的编码表里,有用一字节表示的标点符号,如英文逗号","
5.3 在中文系统的编码表里,有用N(1-4)字节表示的标点符号,如中文逗号",”

语义上我们统称为逗号,但计算机实际表现形式是不同的
英文逗号"," 在ASCII规则下是 00101100,一字节长,屏幕打印宽度是一个宽度
中文逗号"," 在GBK规则下是 10100011 10101100,两字节长,屏幕打印宽度是两个宽度

半角就是指 ASCII 编码表以内的标点符号,它们都是占一个字节,一个打印宽度的
全角就是指在ASCII编码表以外,如GBK,BIG5, Unicode等编码规则下的,多字节的标点符号,屏幕打印宽度通常是两个宽度,即一个汉字宽度。
简言之,ASCII以内的就叫半角符号,以外的就叫全角符号。

6. 回答楼主问题
为什么中文输入法会提供全角半角切换的功能,主要目的我猜是这样的
1. 中文编码表 (GB2312/GBK..) 向下兼容ASCII,但出现了符号冲突,比如有英文逗号,和中文逗号,当用户想输入逗号时,不知道该给出ASCII表内的逗号,还是中文编码表中的逗号。有了全角和半角,用户就可以自己选择,而不用切换成其它输入法了。
2. 中文对齐与美观
3. 存储成本,半角只占一字节,全角占多字节

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值