unicode编码表字符对照表

注意:下面这两段是代理区。即第1——16平面的间接表示,四个字节的汉字就在这里表示D800-DBFF:High-half zone of UTF-16DC00-DFFF:Low-half zone of UTF-16iPhone emoji问题牵出的Unicode代理区的思考

在程序员和产品讨论emoji字符占用的字节数的时候,有人说2个、有人说4个、还有开发说iPhone的表情是iOS自定特定的。究竟emoji是几个字符呢?答案是4个,下面详细介绍一下:

在输入框输入一个emoji——微笑,然后通过UTF-8转化工具,看看它的编码是这样:

可以看到Unicode编码是 D83D-DE03。utf-8的编码是F09F-9883。常见字符Unicode很少四个字节的,这个不寻常的。通常utf-8是1到3个字节的,也就是说在Unicode编码空间的第0个平面上。可以简单推测:既然emoji的utf-8是4个字节,说明在1,2...16个平面中的某一个 。

这里有必要说明一下utf-8的编码规则 如图所示:

我们再看看“微笑”的emoji符号的Unicode:D83D-DE03,已经超过了表格中最大的0X10FFFF了,怎么回事???下面我们根据utf-8的值:F09F-9883.来反推Unicode对应的数值吧,看看究竟是为什么:

得出的结果是0x1-F603,我把这个值叫做UTF-16.这个结果跟Unicode:D83D-DE03的值相差很大,所以,中间肯定经过了一些转换步骤,这个转换就是utf-16的代理!!!

UTF是"Unicode/UCS Transformation Format"的首字母缩写,即把Unicode字符转换为某种格式之意。上面第二张图片展示的是utf-8和unicode的对应表,这只是一个简单的对应,却非常好用。

在正常情况下一个Unicode两个字节,在转化uft-8的时候,根据协议,两个两个字节,对应一个uft-8这样完成转化或者称为映射!

其实在第0个平面中,专门有一个代理区域,不表示任何字符,只用于指向第1到第16个平面中的字符,这段区域是:D800——DFFF.。其中0xD800——0xDBFF是前导代理(lead surrogates).0xDC00——0xDFFF是后尾代理(trail surrogates).

一个代理对儿(前导,后尾),就表示一个utf-16的字符。就那emoji的微笑来说,前导是代理:D83D;后尾代理是:DE03。根据下图可以得出utf-16的值是:0x1-F603。这就照应上了。

具体的公式是:0x10000 + (前导-0xD800) * 0x400 + (后导-0xDC00) = utf-16编码。

就我们说的例子emoji而言,代入前导和后导,结果是:0x10000+(0xD83D - 0xD800)*0x400 + (0xDE03-0xDC00) = 0x1F603

作为程序员的我们,笔者做一个形象的比喻:这对儿(前导代理,后尾代理)就像一个指针,指向了第1——16平面上的每一个码位。经过计算,不难得出:16个平面 * 每个平面码位65536 = 1,048,576个,前导X后尾代理,可以表示的码位也是1,048,576个(哈!真是一个完美的解决方案)如上图所示。

这样做的好处是:程序根据Unicode的第一个字节来判断:(伪代码)

[objc] view plain copyif(Unicode第一个字节 >=0xD8 && Unicode <=0xDB){//这是代理区域,表示第1——16平面的字符。每四个字节表示一个单元}else{//这是正常映射区域,表示第0个平面。每两个字节表示一个单元。}

这样的结果是:根据这个协议判断,计算机可以知道两个字节,还是四个自己表示一个字符。

● emoji 没什么特别的,也是正常的Unicode编码,只是通过代理区实现● 这里说的utf-8和utf-16,其实本质上是一样的。只是utf-8是一个直接的映射。而utf-16需要根据代理区的(前导代理,后尾代理)来映射。utf-16比utf-8多了一步而已!● 话又说回来:如果不是代理区域的出现,就emoji 微笑的unicode: 0X1-F603来说。计算机甚至不知道这是一个字符,还是两个字符!所以,搞了一个Unicode:D83D-DE03来表示unicode: 0X1-F603,防止计算机解码混淆!

THE END
0.óúüApereo CAS,是CAS协议official reference implementation,也差不多是当前开源的SSO解决方案最好、最成熟的jvzquC41enuvf7ygpekov7hqo1jfxnqqrgx0c|p1uql039:452813
1.西班牙语如何输入重音符号?切换西班牙语输入法后,按住引号键,然后再按想要的元音即可:á,é,í,ó,ú. 如需大写,则先按一下引号键,再按住Shift不放的同时,按想要的元音即可。 如何在电脑上添加西班牙语输入法是很多西语初学者的关心的问题,下面就跟着图文详解一起来学习一下吧(以Windos系统为例): jvzquC41o0nvlrfpi0ipo8h1yz5q3;>33:=0
2.葡萄牙语西班牙语俄语土耳其语德语和法语的字符集葡萄牙语和西班牙语主要依赖于Basic Latin和Latin-1 Supplement字符块[^1]。这些字符块涵盖了拉丁字母的基本形式以及重音符号(如á, é, í, ó, ú)和特殊字符(如 ñ)。对于更复杂的字符需求,可能会用到Latin Extended-A或Latin Extended-B字符块。 jvzquC41ygtlw7hufp4og}4cpu}ft8hhzk9dqBy5
3.自定义词汇表和词汇表过滤器的字符集字符代码字符代码 á 00E1 ï 00EF è 00E8 ó 00F3 é 00E9 ô 00F4 ê 00EA ö 00F6 ë 00EB ú 00FA í 00ED û 00FB î 00EE ü 00FC阿拉伯语字符集 对于阿拉伯语自定义词汇表,您可以在 Phrase 字段中使用以下 Unicode 字符。您也可以使用连字符 (-) 来分隔单词。jvzquC41fqit0j|u0csb|xs0eqs0|qdep1zscwxetkhf1ufvguz0fp4ejcxtg}x0jvsm
4.C++博客twzheng'scppblog文章分类 一个简单的回调函数实现 下面创建了一个sort.dll的动态链接库,它导出了一个名为CompareFunction的类型--typedef int (__stdcall *CompareFunction)(const byte*, const byte*),它就是回调函数的类型。另外,它也导出了两个方法:Bubblesort()和Quicksort(),这两个方法原型相同,但实现了不同的排序算法。 jvzq<84yyy4drygnqi4dqv4vy|nfpp4ecvkhq{~15;9:0qyon1xtu
5.Windows的西班牙语输入法微软西班牙语输入法本文详细介绍了Windows西班牙语输入法中带重音符号的小写和大写元音字母的输入方法,以及ñ、Ñ、ü、Ü等特殊字符的快捷键。此外,还对比了英语和西语的输入差异,是学习者必备的输入技巧参考。 Windows的西班牙语输入法: 一、带重音符号的小写元音字母 jvzquC41dnuh0lxfp0tfv8|gkzooa=8:48<938ftvkimg8igvcomu86444887@5
6.语音音标语音服务提示 可以使用国际音标字母表创建正确的 ipa 超切分音位。 对于某些区域设置,语音服务定义了自己的音标,这些音标通常映射到国际音标 (IPA)。 支持 Microsoft 语音 API(SAPI 或 sapi)的语言环境为 en-US/en-CA、fr-FR/fr-CA/fr-BE/fr-CH、de-DE/de-AT/de-CH、es-ES、ja-JP、zh-CN、zh-HK/yue-jvzquC41nggsp7rketutqoy0eqs0|q2ep1g{w{j1ck3tg{{kegy0uyjgej3tg{{keg5trnjej/ytou2rjqtfvrh/ugztAlnf?mkst‚mgtiks
7.Unicode中的常用字母小结HTML/Xhtml网页制作\u00E à á â ã ä å æ ç è é ê ë ì í î ï \u00F ð ñ ò ó ô õ ö ÷ ø ù ú û ü ý þ ÿ 3. 拉丁字母扩展Latin Extended-A: Unicode 0 1 2 3 4 5 6 7 8 9 A B C DjvzquC41yy}/lk:30pku1€jd19?:7<=0jvsm
8.多种格式在线加密解密205 0xCD Í 237 0xED í 206 0xCE Î 238 0xEE î 207 0xCF Ï 239 0xEF ï 208 0xD0 Ð 240 0xF0 ð 209 0xD1 Ñ 241 0xF1 ñ 210 0xD2 Ò 242 0xF2 ò 211 0xD3 Ó 243 0xF3 ó 212 0xD4 Ô 244 0xF4 ô 213 0xD5 Õ 245 0xF5 õ 214 0xD6 jvzquC41yqp/cyu1lls0