utf8编码规则会受制于Unicode实际的字符对应吗?

发布于 2022-09-01 06:55:15 字数 542 浏览 20 评论 0

我用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()函数岂不是要更新了?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

泪意 2022-09-08 06:55:15

因为Unicode的范围是0x0000-0x10FFFF,我测试了一下,python中比规范更为宽松,最大支持到0xFFFFF,而你题目中输的已经超过这个范围所以报错了。
附:UTF-8标准 RFC3629

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文