在本学期的公开课中有个小插曲,学生在实践中英文在计算机存储器中所需的空间大小时,有极个别同学实践后奇怪为何中文没有如课本中描述的那样一个中文占两个字节,而英文的录入又跟课表描述一致。由于大部分同学实践都是能得到一个中文占两个字节,一个英文占一个字节的结论,所以当时的我并没有太关注那极个别同学的不同,自以为机房内的学生机都是配置一致而没有认真考虑是计算机编码的问题,直接就忽略了这些实践不同的结果,现在想想也是自己不够细心,也许那些电脑的设置本来就不同,也可能是那极个别同学自己保存时更换了文本文档的编码方式而自己又不知道这个操作会造成实践结果与别人不同。 计算机在存储文字的时候有不同的方式,我们称其为字符编码。 比较常见的编码有:Unicode,GB。 其中Unicode又可以分为utf-8,utf-16,utf-32。 GB又可以分为:GB2312,GBK,GB18030。 utf-16,GB系列编码,一个汉字占用两个字节。 utf-8,一个汉字占用三个字节,utf-32一个汉字占用四个字节。 总结成一句话就是:汉字并不是所有情况下都只占用两个字节。 计算机一直在更新换代,技术也在不断更新迭代,其实目前应用最广泛的还是utf-8编码,虽然汉字占用了三个字节,但是英文字母和英文符号仍然是只占用一个字节。在绝大多数情况下是用不到多少汉字的,哪怕我们浏览一个中文网站,右键查看网页的源代码,也会发现英文的数量都是远远多于汉字的。如果改用GB系列拜尼马或者utf-16,虽然汉字占用的空间变成了两个字节,但是英文也会占用两个字节,整体占用的空间只会更大。 我仔细查看了如今文本文档保存时可选的编码方式,居然有UTF-8,UTF-8 BOM,UTF-16 IE,UTF-16 BE以及ANSI。 仔细查了一下:UTF-8,是可变长编码,是多字节编码,但它的编码不需要通过而外的BOM(Byte Order Marker)来说明(当然,也有使用BOM的UTF-8编码的),使用这种编码的好处就是节省了存储空间,但编码效率去降低了,这就是所谓的用时间换空间。 UTF-16,是定长编码,是双字节编码,所以两个字节保存时哪个在前,哪个在后关系到解析出字符的结果。至于会出现BE,和LE的编码,由于每个字符占用了两个字节,在Macintosh (Mac)机和PC机上,对字节顺序的理解是不一致的,这个是历史习惯造成的。如果一个文件不明确说明其UTF-16使用的是BE还是LE时,那么就需要通过BOM来指明了。使用这种编码的好处就是编码效率较高,但毕竟浪费存储空间,这就是所谓的用空间换时间。 这东西太专业,我感觉自己也记不住这么专业的解说,但还是必须记住ANSI在简体中文系统下就是GB2312,尝试我本文所描述的实践则可得到对应课本的结论,对于不同编码的实践结果,以后还是要注意与学生解释。且执教至今机房对于中英文存储的实践从来没有与课本有过偏差,但目前却面临了这个问题,也警醒了我,学生的实践都是极具个性化的,他们很愿意去摸索和尝试,甚至会出现我不曾想到的或者我也未曾遇过的情况,其实遇到类似这样的问题并不可怕,我反而很珍惜这样的机会,因为这反而让我更加认真思考自己的备课和教学,提醒自己还要不断学习,提高自己。 |