python2与python3编码的问题

前言

python中数据类型 列表 元组 字典

Python2的字符串有两种:str 和 unicode,Python3的字符串也有两种:str 和 bytes。Python2 的 str 相当于 Python3 的bytes,而unicode相当于Python3的str。
Python2里面的str和unicode是可以混用的,在都是英文字母的时候str和unicode没有区别。而Python3 严格区分文本(str)和二进制数据(bytes),文本总是unicode,用str类型,二进制数据则用bytes类型表示

字符集:就是一套字符的集合(比如中文4000个汉字集合)
字符编码:一套法则,能够将0/1和人类的语言之间进行转换的法则

[转]http://kuanghy.github.io/2016/10/15/encoding-python2-vs-python3

在 Python 中,不论是 Python2 还是 Python3 中,总体上说,字符都只有两大类:

通用的 Unicode 字符;
(unicode 被编码后的)某种编码类型的字符,比如 UTF-8,GBK 等类型的字符。
Python2 中字符的类型:

str: 已经编码后的字节序列
unicode: 编码前的文本字符
Python3 中字符的类型:

str: 编码过的 unicode 文本字符
bytes: 编码前的字节序列
我们可以认为字符串有两种状态,即文本状态和字节(二进制)状态。

Python2 和 Python3 中的两种字符类型都分别对应这两种状态,然后相互之间进行编解码转化。

编码就是将字符串转换成字节码,涉及到字符串的内部表示;解码就是将字节码转换为字符串,将比特位显示成字符。

在 Python2 中,str 和 unicode 都有 encode 和 decode 方法。但是不建议对 str 使用 encode,对 unicode 使用 decode, 这是 Python2 设计上的缺陷。【因为python2中str代表的是字节,unicode才是字符串】

Python3 则进行了优化,str 只有一个 encode 方法将字符串转化为一个字节码,而且 bytes 也只有一个 decode 方法将字节码转化为一个文本字符串。

Python2 的 str 和 unicode 都是 basestring 的子类,所以两者可以直接进行拼接操作。而 Python3 中的 bytes 和 str 是两个独立的类型,两者不能进行拼接。

Python2 中,普通的,用引号括起来的字符,就是 str;此时字符串的编码类型,对应着你的 Python 文件本身保存为何种编码有关,最常见的 Windows 平台中,默认用的是 GBK。Python3 中,被单引号或双引号括起来的字符串,就已经是 Unicode 类型的 str 了。对于 str 为何种编码,有一些前提:

Python 文件开始已经声明对应的编码
Python 文件本身的确是使用该编码保存的
两者的编码类型要一样(比如都是 UTF-8 或者都是 GBK 等)
这样 Python 解析器才能正确的把文本解析为对应编码的 str。

总体来说,在 Python3 中,字符编码问题得到了极大的优化,不再像 Python2 那么头疼。在 Python3 中,文本总是 Unicode, 由 str 类型进行表示,二进制数据使用 bytes 进行表
示,不会将 str 与 bytes 偷偷的混在一起,使得两者的区别更加明显。

字符集:ASCII字符集

python2中,有俩种类型的字符编码,即str和unicode

str字符字节串,二进制文件
unicode文本字符串,是字节序列通过编码后的文本类型

解码
字符串转字节,可以使用encode()函数
字节转字符串,也可以使用decode()函数。

字符集:unicode(包扩 utf-8 utf-16)

python3中,有俩种类型的字符编码,即str和bytes

str字符串,是字节序列通过编码后的文本类型
bytes编码前的字节序列,二进制文件

解码
字符串转字节,可以使用encode()函数,也可以使用bytes()函数。
字节转字符串,可以使用str()函数,也可以使用decode()函数。

str.encode('utf-8')
bytes.decode('utf-8')  bytes.decode()

python中string、json、bytes的转换

json->string
str = json.dumps(jsonobj)

bytes->string
str = str(bytes,‘utf-8’)

string->json
json = json.loads(str)
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值