`
lzzy_alex
  • 浏览: 29139 次
社区版块
存档分类
最新评论

输入法中的全角与半角

 
阅读更多

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

 

这要从发展史说起:
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. 存储成本,半角只占一字节,全角占多字节

分享到:
评论

相关推荐

    Java输入法中全角转半角工具类

    Java输入法中全角转半角工具类: 适用于文件上传,Excel上传输入法格式不对导致的数据不对,通通过滤掉

    CS2005中winfrm解决输入法自动全角到半角转换 回车光标到下一个控件

    CS2005中winfrm解决输入法自动全角到半角转换 回车光标到下一个控件

    pb全角转半角

    pb全角转半角,导入到pb环境才能用哦.

    NET全角变半角补丁

    在开发过程中或者使用C#程序时,输入法总是从半角变为全角,这个工具可以解决你的烦恼。

    用C#实现全角半角转换

    加载窗体时,焦点默认处于TextBox1上,用C#源代码实现全角半角互相切换,在控件的Click事件中触发来调整输入法状态,思路:声明一些相关的API函数,检查输入法的全角半角状态,如果输入法处于打开状态则检索输入法...

    VS2005设置中文输入法(处理了全角问题)

    1.在文本框中设置中文输入法 2.处理了VS2005中的全角半角问题

    .net托管控件TextBox,提供属性返回当前ime状态是全角还是半角

    应网友问题所做的例子。 vb.net本身实现出来貌似有问题,封装了一个dll提供一个支持返回全角半角功能的库,如果有人能做好vb.net版本的,请发给我一份,wuyazhe@yeah.net。谢谢了。

    MySQL存储全角字符和半角字符的区别

    很不巧公司内测IM的时候又遇到MYSQL_DATA_TRUNCATED错误,日志记录还是在mysql_stmt_fetch调用的时候出现的...这并不是我输入空格控制的,而是输入法全角半角控制的。对于全角字符,它是半角字符长度的两倍,而我的MyS

    JS验证全角与半角及相互转化的介绍

    在全角中,字母和数字等与汉字一样占据着等宽的位置。 半角:是指一个字符占用一个标准的字符位置。半角占一个字节。 半角就是 ASCII 方式的字符,在没有汉字输入法起作用的时候,输入的字母、数字和字符都是半角的...

    Framework2.0半角全角切换补丁

    遇到过中文输入法的半角自动切换成全角的问题,其实这是Framework2.0的一个bug,这个补丁程序将会解决您的烦恼。

    C#控制键盘输入全角半角

    C#控制键盘输入全角半角,我做项目时使用此方法,很有效哟!!!!!

    ndp20-kb925488-x86.rar_ KB925488_NDP20-KB925488 .X_NDP20-KB92548

    解决.NET2.0 输入法(全角和半角转换错误)

    资产评估管理系统 C#

    图1.1 五笔输入法的全角与半角状态 (4)本系统中折旧额的算法采用的是年限平均法(或称直线法)的折旧计算公式: (5)选择资产显示列模块中“资产编号”复选项无论勾不勾选都显示。 (6)在主界面中双击资产...

    房屋中介系统C# +SQL2000

    (3)在本系统中填写信息时,有时需要将五笔输入法的全角状态改为半角状态,否则程序可能会弹出错误提示,五笔输入法的全角状态和半角状态如图1.5所示。 图1.5 五笔输入法的全角与半角状态 (4)在“房源状态浏览...

    .net2.0中文输入法全半角补丁

    在vs中使用非ms中文输入法会自动切换全角,每次输入都要切换,很烦人,现在有补丁了大家快去下啊

    javascript实现全角半角检测的方法

    本文实例讲述了javascript实现全角半角检测的方法。分享给大家供大家参考。具体如下: //全角半角校验 function issbccase(strTmp) { for (var i=0; i&lt;strTmp&gt; 128){ return true; break; } } return false; ...

    C#全半角转换代码

    C#全半角转换代码,处理字符串中的全角字符,解决因输入法导致的数据错误

    全半角输入法混乱补丁

    中文输入法全角问题 补丁说明 1、微软最新发布的补丁,解决了数据录入时输入法自动切换为全角的问题; 2、系统软件安装完成后,双击“NDP20-KB925488-X86.exe”文件,按照提示即可完成补丁安装; 3、安装完成...

    高校教师档案管理系统

    (3)在本系统中填写信息时,有时需要将五笔输入法的全角状态改为半角状态,否则程序可能会弹出错误提示,五笔输入法的全角状态和半角状态如图1.9所示。 图1.9 五笔输入法的全角与半角状态 (4)本系统操作员分为...

    百度输入法电脑版 v5.4.4820 官方版.exe

    状态条上的图标从左到右分别代表“输入状态”、“全角/半角符号”、“中文/英文标点”、“设置菜单”。 输入窗口: 上排是用户输入的拼音,下排是候选字词,输入所需的候选字词对应的数字,即可输入该词。第一个...

Global site tag (gtag.js) - Google Analytics