unicode utf-8 utf-16之间有什么区别与联系?
发布网友
发布时间:2022-04-23 05:46
我来回答
共1个回答
热心网友
时间:2023-10-17 04:56
首先你要明确两个概念。字符集:类似于电话本,存放该字符集能够显示支持的符号以及该符号对应的唯一的号码;编码方式:是指针对某个字符集的编码规则。
下面详细说说二者的关系,通过该字符集的某种编码方式可以将字符集中的那个号码按照该编码方式的规则运算得出一个新的数值,实际在计算机中进行存储,传输的都是这个新数值。好,其实Unicode就是一个字符集,它包含了世界各国家使用的所有符号,而UTF-8 、UTF-16是Unicode字符集的两种编码方式。
可能你会问为什么不直接使用Unicode的号码来进行存储,而非要使用UTF-8或者UTF-16规则再运算一个数值出来。其实这是为了方便计算机内的存储与计算机间的传输,因为在计算机中只存在二进制(或者说只识别二进制0 或 1),8位二进制为一个字节,如果没有一定的规则而直接使用Unicode的号码进行存储,例如"计算机"这三个字,假设这三个字在Unicode字符集中的号码分别对应8 13 22那么存储的二进制为:1000-1101-10110(-是我为了方便阅读自己加的,实际在计算机中是连续存储的),可以看到‘计’为1000 四位,‘算’1101四位,‘机’10110五位,那么当你保存完毕,再次打开希望查看的时候,计算机拿到的就是1000110110110这么一串二进制数字,显然如果没有一定的规则计算机并不知道如何显示,即计算机无法确定是每四位当做一个号码还是每五位(拿1000还是拿10001亦或是1000110110110当做号码到字符集中查找对应的符号),所以才需要UTF-8、UTF-16这种对Unicode的号码再次编码的规则。
那么我就以UTF-16为例来说说它是如何解决上面的‘计算机’存储再显示问题。UTF-16的编码规则就是每个符号我用16位二进制来表示即2个字节(1字节=8位二进制),那么‘计算机’三个字符按照UTF-16编码规则表示:‘计’0000 0000 0000 1000、‘算’0000 0000 0000 1101、‘机’0000 0000 0001 0110,存储时就是如下的一串二进制:0000 0000 0000 1000-0000 0000 0000 1101-0000 0000 0001 0110。当你需要再次打开查看的时候,计算机拿到上面那一串二进制,就会知道“我要以每16位二进制来当做号码去字符集中提取对应的符号”,这样就会正确给你再次显示“计算机”三个符号。说到这里我想已经能够解答你的问题了。
PS:其实你以UTF-16进行存储的时候开头是会有一个BOM来标识该文件是以UTF-16编码规则进行编辑的,要不然计算机怎么知道这个文件是UTF-16的。我就不在这里赘述了,已经属于另外一个问题范畴了。以上所有内容本人纯手打。如有不明之处,请留言。