纸上得来终觉浅:来验证一下编码的问题

纸上得来终觉浅:来验证一下编码的问题

在之前的文章《温故而知新:复习一下字符编码(ASCII、GB2312、Unicode、UTF-8、区位码)》,我复习了一下字符编码相关的问题。但是理论归理论,总要实践一下才会觉得靠谱一些嘛。

先来秀一下我以前测试汉字库的效果图

其中一个我显示反了😳,真的没有其它含义,我不想造反的。


当初流行愤怒的小鸟,但是我因为计算有误导致字库显示的不正常,不过效果倒是比正常的好看多了呢,我曾戏言是把小鸟关到笼子里。


终于把字显示正常了,哎,好想念婉儿表妹,不知道表妹是否还记得我?

其实从GB2312到区位码再到取字模出来还是比较简单的事情,毕竟就是加加减减乘乘除除的事情。现在很多液晶模块里边都自带字库,给相应的指令去显示即可。不过如果要显示特殊的尺寸规格以及特殊的字体,还是要用到自定义字库的。


扯远了,当初开发单片机程序的时候,因为时常要处理字符编码,所以我写了个超简单的工具给大家查询编码用。这里我用来验证一下之前学习编码那篇文章里涉及的问题。


可见对ASCII字符而言,Unicode(UCS-2)直接在ASCII字节前加上0x00,UTF-8编码出来的字节长度是一个字节和ASCII保持一致。


对于常见汉字(GB2312编码方案范畴内的),Unicode和ASCII方式都占用两个字节,但是两者内容是不同的,并且有不同的叫法,前者叫宽字符(WideChar)后者叫多字节字符(MultiByte)。而UTF-8编码出来占用三个字节,也就是说常见汉字编码成UTF-8反而多占用一个字节。


𐍈一个好特殊的字符,这个字符Unicode(UCS-4)存储占用了四个字节,UTF-8编码出来也是四个字节。因为我系统中设置的Unicode之外的默认编码为GB2312,它支持的范围就是两个字节,所以转换成GB2312多字节字符后会缺失内容。(哦,或者我程序界面上应该用GB2312而不是ASCII更好一些,懒得改了)


𤭢一个好神奇的汉字,据说收录在康熙字典,音义均同“碎”。这个字打破我一直以来都认为汉字Unicode表示只占两个字节的认知。以前听说什么公安局户口录入系统经常遇到敲不出来的汉字,这次我也长见识了。其它方面到和𐍈没啥区别了。

好了,就到这吧,至于什么UTF-16、UTF-32,我就不去学习了,累啊,有了这几把板斧,应该足够我愉快的玩耍了。

相关链接


This page is synchronized from the post: 纸上得来终觉浅:来验证一下编码的问题

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×