python - utf8编码规则会受制于Unicode实际的字符对应吗?
迷茫
迷茫 2017-04-17 14:52:32
0
1
475

我用python 写
'\xF5\x90\x90\x90'.decode('utf8')
但是报错了:

UnicodeDecodeError: 'utf8' codec can't decode byte 0xf5 in position 0: invalid start byte

问题是:\xF5\x90\x90\x90 是个标准的四字节的utf8编码的字符啊
转换成二进制就是 11110101 10010000 10010000 10010000
完全符合utf8编码规则:11110xxx 10xxxxxx 10xxxxxx 10xxxxxx

我把\xF5换成\xF2就没有问题了,也就是11110010开头,难道是因为Unicode实际上没有用到这么多的字符,所以不能decode('utf8')?但是规则是对的呀,万一哪天Unicode又扩充了很多字符集,那python的decode()函数岂不是要更新了?

迷茫
迷茫

业精于勤,荒于嬉;行成于思,毁于随。

全員に返信(1)
Peter_Zhu

Unicode の範囲は 0x0000 ~ 0x10FFFF なので、テストしたところ、Python は仕様よりも緩和されており、0xFFFFF までサポートしていることがわかりました。ただし、ご質問の入力はこの範囲を超えているため、エラーが報告されます。
添付ファイル: UTF-8 標準 RFC3629

いいねを押す +0
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート