utf8编码规则会受制于Unicode实际的字符对应吗?
我用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()函数岂不是要更新了?
utf8mb4 python 编码 utf-8 python2.7
忧郁的触手
9 years, 8 months ago
Answers
因为Unicode的范围是0x0000-0x10FFFF,我测试了一下,python中比规范更为宽松,最大支持到0xFFFFF,而你题目中输的已经超过这个范围所以报错了。
附:
UTF-8标准 RFC3629
真甜幸村喵
answered 9 years, 8 months ago