试图发现角色的unicode代码点

时间:2014-07-10 20:22:27

标签: unicode binary utf-16

我有一个字符,当在十六进制编辑器中查看时显示为:

FF  FE  08  27

意味着它的二进制表示是(四字节编码):

11111111
11111110
00001000
00100111

查看unicode table and description这似乎没有意义,因为四字节编码必须具有11110xxx形式的前导字节。

我很可能误解了unicode规则,但是你可以告诉我在确定这个角色的代码点时我遇到了什么问题吗?

1 个答案:

答案 0 :(得分:4)

Unicode字符U+FEFF是字节顺序标记(BOM),表示这是小端UTF-16编码,而不是UTF-8。字符为U+2708AIRPLANE(✈️)字符。

使用Python 3的一点证明:

>>> import unicodedata as ud
>>> s=b'\xff\xfe\x08\x27'
>>> s.decode('utf16')      # Removes BOM and uses indicated little-endian decode.
'\u2708'
>>> s.decode('utf-16le')   # explicit decode in little endian leaves BOM.
'\ufeff\u2708'
>>> for c in u: print(ud.name(c))
...
ZERO WIDTH NO-BREAK SPACE  # also known as BOM.
AIRPLANE