原创,这篇修改了很多遍,转载请注明出处方毓臣的博客 http://fangyuchen.com
全角和半角
全角是指一个字符占用两个标准字符位置的状态,需要两个字节空间来存储全角字符(全角下的字母和数字都与汉字一样,占两个标准字符位置。这里的标准字符位置应该指的是一个可见的ASCII码在中日韩所谓的半角字符下所占的一个字符位置),当然,半角就是指一个字符占用一个标准字符位置的状态,需要一个字节空间来存储半角字符。(不存在半角的汉字,虽然某些输入法有中文-半角的选项)
全角和半角针对的是占用标准字符的空间单位,而不是字符集。比如在DBCS(Double Byte Character Set,双字节字符集,兼容ASCII)系列标准(包括了GB2312,GBK,GB18030等方案)里,一个半角字符需要一个字节存储空间,但是在Unicode字符集,一个半角字符需要一个及以上字节的存储空间(分别使用UTF-8和UTF-16的编码方式,所占字节存储空间大小不同)。
请注意:”字符”和”字节”两个术语的不同, “字节”是一个8位的物理存贮单元,而”字符”则是一个文化相关的符号。在Unicode(Unicode只是一个符号集,只规定了符号的二进制代码) 中,一个字符需要一个或以上的字节存储空间(比如使用UTF-8编码方式,一个ASCII码只需要一个字节的存储空间,但是对于汉字比如“严”来说,则需要三个字节的存储空间),但是对于ASCII编码集合编码方式来说,一个字符需要一个字节存储空间。我们的标准字符指的是ASCII码。
在英语国度的人们是不存在半角和全角的概念的,因为传统上,英语或拉丁字母语言使用的电脑系统,每一个字母或符号,都是使用一字节的空间(一字节由8比特组成,共256个编码空间,需注意Ascii码字符集只规定了128个字符的编码,只占用了一个字节的后面7位,最前面的1位统一规定为0)来储存,也只需要占用一个标准字符的位置。
半角和全角是中日韩等国的CJKV字符的显示格式,是中日韩特有的需要。汉语、日语及韩语文字,由于数量大大超过256个,故惯常使用两字节来储存一个字符,同时,也是因为中日韩等文字的书写习惯,如果统一使用全角字符,占用两个字符位置的话,排列起来也显得整齐。在使用固定宽度文字的地方(如DOS、部分文字编辑器等),为了使字体看起来齐整,英文字母、数字及其他符号均提供了全角格式,由原来只占一个字空间,改为一概占用两个字的空间来显示,并且使用两个字节来储存。至于半角字符,也是不可或缺的,因为,一般的系统命令是不用全角字符的,只是在作文字处理时才会使用全角字符,另外,程序的源代码中只能使用半角标点(不包括字符串内部的数据)。补充:可以理解为,半角就是ASCII方式的字符,半角字符的Unicode和ASCII码是对应的,eg:A的ASCII是0x41,半角的Unicode是U+0041,全角的Unicode是U+FF21。
搜狗输入法
个人观点,搜狗输入法在英文输入法下(只能输入英文字母,数字和标点符号),全角和半角指的是一回事(都是半角。注意,至少在ubantu系统下情况如此,而windows系统我认为也不例外吧)。我在ubantu操作系统的terminal终端,分别使用英文输入法的半角和全角输入命令行,发现用全角和半角的命令行都能被正确的执行。所以我认为,搜狗输入法并不存在全角的英文输入法,只有因为理论上全角字符命令行是不可能被terminal识别为并执行的。然后在gedit编辑器中也发现,英文输入法下,全角和半角无论是拉丁字母,数字还是标点符号,都是一样的格式,这也佐证了我的看法。
在中文输入法下(只能输入中文和数字和标点符号),全角和半角相对来说有点不同。对于中文而言,虽然有半角的说法,但是其实汉字只能是全角显示,也就是占用两个标准字符位置的。而标点符号是一样的,虽然有半角的说法,但其实也都是全角显示。至于数字,的确有全角和半角之分。
总之,搜狗输入法是比较奇怪的玩意。但是貌似很多输入法是可以设置字母、数字、标点符号在全角和半角下的显示情况的,比如ABC输入法。对于中日韩文来说,只能是全角,也只有全角。
参考链接: 一下文章内容不一定完全正确,比如对于全角和半角描述的不准确,以及Unicode字符集和UTF-x的编码方式的混淆。需要读者细细思考。