Ỹ
是越南语意大利
的意思(网上查的,未必准确,不过这个不是重点)
从字面上看应该是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字符