本文转载自微信公众号「活在信息时代」,作者活在信息时代。转载本文请联系活在信息时代公众号。
早期玩光荣三国游戏的同学一定会对游戏中人物名称的乱码印象非常深刻。例如说《三国志曹操传》,里面的曹操名字变成了“变巨”,而赵云的名字则变成了“化冻”。其它的人物名字也都是乱码。
尽管如此,也挡不住一款优秀的战略游戏对于玩家的吸引力。很多玩家会在乱码的情况下,靠猜测和不屈的意志坚持玩下去。而一些懂一点技术的同学则会使用各种转码工具,将乱码转换成可以阅读的繁体字。
那么为什么会出现这种乱码的情况呢?那就要从计算机对于字符的存储格式开始说起了。
我们知道计算机是以二进制方式存储数据的。而字符编码则决定了同样的二进制数据计算机显示出来字符具体是什么。例如最简单的ASCII码,二进制数0100 0001,也就是16进制的0x41,就代表字母A。所以如果计算机看到这串二进制,又是以ASCII编码的话,那就会把它显示成A。同时的,0110 0001,即16进制的0x61就代表字母a。
那么如果有另一种编码,把0100 0001这串二进制给定义成“一”的话,那么以这种编码格式读取的这串二进制,就会显示成“一”了。
这就是为什么早期的老游戏会出现乱码问题了。原因就在于,那些游戏多数是以台湾的Big5繁体字编码编成的,而在我们的电脑上,则以大陆的GBK简体编码显示,那就出问题了。
下面小编就用Mysql数据库自带的转码函数,给大家演示一下,“化冻”是怎么变成赵云的。
第一步:我们先查出化冻的16进制编码
这里面hex函数用于显示字符串的16进制编码,convert函数将化冻两个字用gbk格式编码。
执行之后,我们得到化冻两个字在gbk编码下的16进制表示。
我们可以看到BBAFB6B3,就是化冻两个字在gbk编码下的16进制表示了。如果转换成二进制的话即为1011 1011 1010 1111 1011 0110 1011 0011。
第二步:将16进制编码转换成big5码
这里面,我们把刚才查找出来的化冻两个字对应的16进制数字转换成big5码格式,看看big5码里面,这串16进制数字代表什么。于是我们看到,在big5码里,这串数字被显示成了繁体字的赵云。这样,我们就看到了为什么在一些老游戏里面,用big5码开发的游戏,在大陆的简体中文系统上,为什么会变成乱码了。
同样的,我们可以查到变巨的16进制,以及对应的big5码。
类似的还有
而现在,由于硬件价格的大幅下降,大部分软件都已经使用unicode开发了,于是可以在世界上大部分的电脑上使用。然而依然还有一些软件,在一些情况下还会有编码问题哦。例如说最新版的Mysql,在中文windows操作系统的电脑上,如果电脑名使用了中文字符的话,就会出现安装错误哦。