Python-1 字符编码

进行文本处理时经常遇到这个问题,顺手记录下来

原理

python2 中默认编码为ASCII,但3中则时unicode。
unicode分为utf-32(4byte),utf-16(2byte)(常用), utf-8(1~4byte),但文件中村的还是utf-8以节省空间。
python3进行encode编码的同时会主动把string变成bytes类型,而decode解码则会把bytes类型变为string类型;进行unicode编码时,一个中文字符=2个字节,一个英文字符=一个字节,而ascii不能存中文字符。
utf-8作为unicode的优化,是可变长字符编码,所有英文字符依然按照ASCII进行存储,但是中文字符统一为3个字节。

实际转化

py2 unicode充当中间件,对gbk以及utf-8都需要首先decode为unicode然后再encode为其他编码格式
py3 默认unicode,对于字符直接encode就行,但是输入的其他格式的文本依旧需要先解码再编码

#! /usr/bin/env python
# __auther__ == luoahong
#无需声明字符编码,当然你声明也不会报错
  
s = '你好'
# 字符串s已经是unicode编码,无需decode,直接encode
s_to_gbk = s.encode("gbk")
print("----s_to_gbk----")
print(s_to_gbk)
#这边还是一样,gbk需要先解码成unicode,再编码成utf-8
gbk_to_utf8 = s_to_gbk.decode("gbk").encode("utf-8")
print("-----gbk_to_utf8---")
print(gbk_to_utf8)
#解码成unicode字符编码
utf8_decode = gbk_to_utf8.decode("utf-8")
print("-------utf8_decode----")
print(utf8_decode)
  
#输出
----s_to_gbk----
b'\xc4\xe3\xba\xc3'
-----gbk_to_utf8---
b'\xe4\xbd\xa0\xe5\xa5\xbd'
-------utf8_decode----
你好

总结

  • unicode可识别主流编码方式下的字符串
  • py3中可太过unicode去识别字符,编码后会变成对应的二进制字节码,所以需要解码成unicode才能重新识别为字符。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值