除utf-8之外的字符编码格式是咋解决大尾端与小尾端的问题的

GB2312、GBK等编码是与UTF-8类似,并没有大端小端的区别,因为这些编码已经规定好了第一个字节是什么,第二个字节是什么,等等。而UTF-16每一个编码单位是一个16位整数,但并没有硬性规定这个整数是使用大端还是小端进行存储,所以才会有大端和小端两种存储方式,并使用BOM进行区分。

附:GB2312-1980 标准原文节选
除utf-8之外的字符编码格式是咋解决大尾端与小尾端的问题的
【除utf-8之外的字符编码格式是咋解决大尾端与小尾端的问题的】

■网友
UTF-16的话是使用BOM来判断字节序的,如果BOM不存在的话就有概率出事。GBK貌似没有BOM什么的,所以应该是,传输协议会规定一种字节序,除此之外得靠元数据来标识吧。。。

■网友
其实根本原因是unicode官方 最初没把标准说清楚,只规定了字符集,没规定编码方式。于是乎大家望文生义,想着正着写也行 倒着写也行。utf8因为是1-4个字节,必须正着写,所以不存在这个问题。而utf16以上都存在这么一个被称为大小端的问题。而像gb2312 gbk国标,因为规定比较死,所以就没有这种混乱。幸好unicode规定为每种编码添加一个bom前缀,用于标识编码。电脑也正是通过识别这个前缀标记识别不同unicode编码的。
■网友
因为gbk utf8的存储单位是字节,存储介质的最小存储单位也是字节,所以并没有字节顺序的问题,文件系统已经规定好了从文件的哪一端读。而utf16的存储单位是双字节,那么存在一个问题,一个utf16的存储单位里有两个存储介质的存储单位,哪个在前哪个在后就要去规定一下。这跟发送数据时,字节为单位的数据不需要使用网络字节序,int等多字节单位的数据需要转换网络字节序是一样的。


    推荐阅读