python中字符串和编码问题

英文和汉字不同方式下的编码(二进制)
字符 ASCII Unicode UTF-8
A 01000001 00000000 01000001 01000001
01001110 00101101 11100100 10111000 10101101

解释一下表

Unicode编码最少是两个字节,对于有些偏僻的字符使用4个字节,UTF-8根据不同的字符大小进行编码通常是1-6个字符,汉字通常是3个字符。

现在的计算机系统统一使用Unicode编码,如果字符全为英文,当需要将字符保存到硬盘或传输时,使用UTF-8将节省一倍的空间,所以网络中的大多数数据都是UTF-8进行编码的,当计算机接收到UTF-8编码的数据再将其转换到可以识别的Unicode编码进行操作。

可能读者发现了一个问题,就是如果字符全是汉字,Unicode是比UTF-8要节省一个字节的。那为什么在传输汉字时不直接用Unicode编码方式而是用UTF-8,作者认为应该是现在大多数计算机(服务器)已经默认它收到的UTF-8的字符编码方式,用Unicode编码当然是可以的,但前提是对方能读懂。详解可以看https://zhidao.baidu.com/question/16935611.html

正题python3中

   ord()函数获取字符的十进制整数,chr()把十进制整数转换为对应字符

>>> ord('a')
97
>>> chr(97)
'a'

str与bytes关系

python中字符串和编码问题_第1张图片

如果bytes中有一部分无效字节,可以传入errors = ‘ignore‘

>>> b'\xe4\xb8\xad\xff'.decode('utf-8',errors = 'ignore')
'中'

参考资料

www.liaoxuefeng.com/wiki/0014316089557264a6b348958f449949df42a6d3a2e542c000

/001431664106267f12e9bef7ee14cf6a8776a479bdec9b9000

 

你可能感兴趣的:(python中字符串和编码问题)