ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

Unicode与字符编码

2021-12-16 09:03:24  阅读:235  来源: 互联网

标签:编码 UTF 字节 16 Unicode 字符


背景

升级项目的Unity版本到2020,之前扩展的文本组件超链接功能不能用了,因为TextGenerator改版了,以前空白字符和富文本标签是有顶点数据的,现在没有了,导致字符和顶点信息对应不上了。解决的期间发现有的字符会被拆成两个char,感到不解,于是有了下文的总结。

总结

字符集规定字符和数字的映射关系。
字符编码规定字符如何编码、存储。

Unicode是字符集,UTF-8是字符编码。

UTF:Unicode Transformation Format,Unicode转换格式。

代码点(code point,码位):Unicode规定的,用来映射字符的数字。但一个字符可能由多个代码点组成。比如 é 是由两个代码点 \u0065\u0301 组成的。

代码单元(code unit,码元):一个编码模型中,用来代表字符的最小的字节单位。比如UTF-8,代码单元就是1个字节(8个比特位)。

BOM(Byte Order Mark) 字节序标记:字符“Zero Width No-Break Space”,零宽度非换行空格,FEFF。如果是FE FF,则为大端;如果是反过来FF FE,则为小端。

大端(Big endian)和小端(Little endian):按字节,不是按位。从左到右,从高位到低位,则为大端,内存低地址处放高位。反之为小端。大端的好处是可以提前判断报文信息,小端适用于加法运算,因为有进位。
下面这段代码可以用来测试一下你的编译器是大端模式还是小端模式:

short int x;
char x0,x1;
x=0x1122;
x0=((char*)&x)[0]; //低地址单元
x1=((char*)&x)[1]; //高地址单元

计算机中的大端小端是什么?
大小端模式

UTF-8:变长编码,1-6个字节表示。具体规则网上很多,大致是零平面用0开头,其他平面第一个字节用前面连续的几个1表示总共需要几个字节表示这个字符,然后用一个0隔开,后面几个字节用10开头,剩余位依次填充码点比特位:

UTF-16:把Unicode字符集的抽象码映射为16个比特位的整数,C# 中的 char 就是16位的。第零平面用8位即可满足(65536个)。其他平面,即辅助平面,用两个16比特的整数的代理对实现。

代理对(surrogate pair):UTF-16中,16个比特位不足以映射所有的Unicode字符。所以,第零平面保持原本的映射,用16位表示。辅助平面需要20位来表示,则用两个16位整数表示。具体方法是:

标签:编码,UTF,字节,16,Unicode,字符
来源: https://www.cnblogs.com/nickcan/p/15696276.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有