Ỹ是越南语意大利的意思(网上查的,未必准确,不过这个不是重点)
从字面上看应该是1个字符
用erlang转出来的list也应该是1个
BUT ….
通过http://utf8.supfree.net/,我们知道:中文我的utf8编码是我,对应的10进制是25105。
我们继续看字符Ỹ,这个转出来的是[89, 771],怎么是两个字符呢???
先来个测试:
1 | t() -> |
执行结果:
1 | A1: [89,771] |
unicode编码规则
| Unicode编码(16进制) | UTF-8 字节流(二进制) |
|---|---|
| 000000 - 00007F | 0xxxxxxx |
| 000080 - 0007FF | 110xxxxx 10xxxxxx |
| 000800 - 00FFFF | 1110xxxx 10xxxxxx 10xxxxxx |
| 010000 - 10FFFF | 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx |
上表是utf8的编码规则,具体含义请看参考文档-1
问题继续
继续最开始的问题 …
771对应的16进制是0x303,在000080 - 0007FF范围内,771对应的2进制是01100 000011,对应表得出,110 01100(204) 10 000011(131), 最终编码是0xCC83
同上,89对应的01011001(89),最终编码是0x59
因此,尽管看起来是一个字符,实际上是两个utf8字符