kir*_*iri 5 python unicode encoding utf-8
具体来说,每次逃跑都\xe2\x80\x93做了什么以及为什么需要3次逃跑?尝试单独解码会导致"意外的数据结束"错误.
>>> print(b'\xe2\x80\x93'.decode('utf-8'))
–
>>> print(b'\xe2'.decode('utf-8'))
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
UnicodeDecodeError: 'utf-8' codec can't decode byte 0xe2 in position 0: unexpected end of data
Run Code Online (Sandbox Code Playgroud)
Mar*_*ers 18
您有UTF-8字节,这是一种编解码器,是将文本表示为计算机可读数据的标准.当编码到该编解码器时,U + 2013 EN-DASH代码点编码为这3个字节.
尝试只解码一个像UTF-8这样的字节是行不通的,因为在UTF-8标准中,一个字节本身并不具有意义.在UTF-8编码方案中,一个\xe2字节用于Unicode标准中U + 2000和U + 2FFF之间的所有代码点(它们都将用额外的2个字节进行编码); 这就是4095个码点.
Python bytes以一种方式表示对象中的值,该方式允许您通过将值复制回Python脚本或终端来重现该值.然后,任何不可打印的ASCII都由\xhh十六进制转义表示.这两个字符构成字节的十六进制值,0到255之间的整数.
十六进制是一种非常有用的表示字节的方法,因为你可以表示2对4个字节,每个字节有一个字符,一个数字在0 - F范围内.
\xe2\x80\x93则表示有三个字节,十六进制值分别为十进制值E2,80和93或226,128和147.UTF-8标准告诉解码器取第一个字节的最后4位,以及第二个和第三个字节中每个字节的最后6个字节(其余的位用于表示您正在处理错误的字节类型)处理).那些4 + 6 + 6 == 16位然后编码十六进制值2013(0010 000000 010011二进制).
您可能想要了解编解码器(编码)和Unicode之间的区别; UTF-8是一个可以处理所有Unicode标准的编解码器,但不是一回事.看到:
绝对最低每个软件开发人员绝对必须知道关于Unicode和字符集(没有任何借口!)作者:Joel Spolsky
Ned Batchelder的实用Unicode
| 归档时间: |
|
| 查看次数: |
11102 次 |
| 最近记录: |