浅谈字符集GB18030, GBK, GB2312, Unicode的适应性范围
目前在中文世界里,计算机系统发展非常快速,传统的Windows已经逐渐跟不上国产化,如国产安卓系统,华为欧拉鸿蒙等系列,国产Linux系统等。
国产化普遍支持GB18030!
注: GB 18030标准符合性认证一度属于国家强制性标准,由中国电子技术标准化研究所(CESI)认证中心进行授权认证。
那么这些字符集标准哪些在中文世界里适用性范围更广呢?
从集合概念来讲:
GB18030 > Unicode > GBK > GB2312
从使用平台来讲
国产化系统 > 国外系统(Windows,MacOSX,Linux,Ubuntu等) > 旧系统(WinXP, WIN 98等)
为什么同样是Unicode字符集,会出现手机和电脑不兼容的情况呢?
Unicode最开始收录的中文是GBK,但其实不是强制性的,因为Unicode只规定了使用范围,各国的字符集如何映射到Unicode是不强制的(本质上除了第一版的常见字符,后续新字符是由各自去处理映射关系的,毕竟谁也不愿意等ISO组织慢慢来固化标准)
注意:unicode组织大部分工作是收集各个国家的工作成果,也就是得等各个国家制定好标准后,他们再慢慢吸收过来形成新的Unicode标准版本,而且各个国家在制定标准时,是要考虑如何映射到Unicode的,大家都这么干的,乱来只会自讨苦吃。
所谓的GBK转Unicode(如转UTF8)是使用了PUA的,也是微软Windows一直在使用的标准,比较旧。
而后来新版本的Unicode是收录GB18030的,注: Unicode13.0中收入的汉字大约93000,GBK只有大约21000个汉字。
所以:GB18030转Unicode时有些同样的字符是不再使用PUA的。为什么会这样呢?因为GBK是微软在GB2312基础上扩展的,并不是真正的国标,所以在映射到Unicode时就和国标GB18030出现不同处理方式,但GB18030已经最大程度上兼容GBK了。
这样就导致了在手机上将GB18030的中文转成Unicode后再以UTF8保存文件,再拿到Windows使用UTF8解析成Unicode字符集,系统会找到不对应的GBK字符,最终只能出现乱码。
有时候会发现,在国产化系统中保存的文档,会在Windows上出现无法识别的字符,原因就在于此.
有没有办法扩充Windows系统的Unicode字符集?
目前Windows仍然使用GBK标准的Unicode,也就是说其自带的Unicode也只收录了GBK字符集,也就是早期版本的Unicode(不是最早的,但与最新版差距也比较大)
而如华为手机采用ISO标准的Unicode,其中收录的中文字符集是参考GB18030中的中文部分(不完全,PUA区域标准不同),不一定是最新版本的Unicode,但其范围已经是大于微软采用的GBK。
可以简单认为Windows的自带Unicode字符集是残缺的,因为微软长期以来都只收录了GBK字符集,已经不能适应当今快速发展的计算机时代。
这样来看,那么如果安装GB18030字符集能解决该问题吗?
很遗憾,不能,GB18030字符集在Windows上只能是以独立代码页安装,并不能影响其自带的Unicode字符集。
有没有办法升级Windows系统的Unicode字符集版本?
也很遗憾,貌似没有公开资料提供办法,按道理是替换某个文件就可以了,但很可能导致整个系统出现乱码,毕竟所有字符硬编码是对应当前版本的字符集的,替换新字符集后可能由于不兼容就乱码了。