关于字符编码的思考

字符编码这个东西不是那么被重视,但往往又不能绕过它,总是会产生这样或那样的问题。

写下一点思考,你有没有想过你通过键盘输入字符到记事本,为什么它可以显示出来这个字符?你有没有想过,如果使用一台默认ANSI编码为ASCII(American)环境的计算机的notpad输入一个汉字时为什么它也能显示出来这个汉字,而如果你采用默认的Ansi格式存盘后却成了乱码?你又有没有想过编程语言中不同的字符编码转换的区区两行代码内部的实现原理是什么?即两种不同的字符编码到底是怎么转换的?以上问题其实都不简单!可查找的资料也有限,下面写下我的一点思考供日后回顾。

1:记事本在编辑模式下,字符当然是存在内存中的,那你借助于输入法能输入几乎所有你想输入的字符,都能显示出来,这说明了记事本在内存工作时绝对不是采用的ANSI编码格式,因为如果是ANSI格式的话,是不通用的,是随区域而变得。所以我大胆猜测,notepad在内存工作时采用的是unicode编码格式,它支持所有的字符。

2:关于notepad存盘时,如果你选的是ANSI格式存盘,那你有可能会丢失你编辑的很多东西,因为ANSI是不支持所有字符的,实际上它会有一个字符转换(详见下面描述),将unicode编码转换成你选中的存储格式,比如utf-8格式。

3:关于两种不同的字符编码之间的转换,我在查资料的时候发现了这么一句话,深得我心,和我猜测的一样:GBK、GB2312等与UTF8之间都必须通过Unicode编码才能相互转换。实际上unicode编码应该是一种标准或桥梁,其他所有的编码格式都应该有一个类似指针的东西指向Unicode编码中相同字符所对应的位置(单射而非映射),这样每种其他的格式都能和unicode格式直接转换,那间接的都能互相转换了!

4:不能转换的情况,不能转换当然就是,要转换的格式不支持待转码的某些字符,比如说utf-8中的'中'字符肯定是不能转换到big5格式的,因为根据上面的转换方法,从utf-8码表的'中'字那串编码可以找到对应unicode编码的那一串编码,比如说是x,另一边,从big5中循环发现,没有任何一个字符指向刚刚unicode码表中的这个x,那转换当然就不能成功了咯,你要霸王硬上弓那我只能给你用个?来代替了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值