美文网首页
python2的编码和解码问题

python2的编码和解码问题

作者: 不一样的丶我们 | 来源:发表于2018-01-11 09:44 被阅读105次

怀念python3

  • python3默认情况下,是通过Unicode直接编码操作的,对于字符串,特殊字符,数字的支持都是一致的,字符串的编码和解码非常简洁.
s = "abc"
# 声明了一个字符串这个字符串就是构造了一个str对象,默认情况下就是通过Unicode直接编码的字符.
# 如果将字符转化为字节,进行编码操作:
s.encode("utf-8")
>>> s = "中文"
>>> x = s.encode("utf-8")
>>> x
>>> b'\xe4\xb8\xad\xe6\x96\x87'
# 如果将字节转化为字符,进行编码操作:s.decode("utf-8")
>>> x
>>> b'\xe4\xb8\xad\xe6\x96\x87'
>>> x.decode("utf-8")
>>> '中文'
  • python2中,默认情况下是通过ascii编码进行操作的
  • python中有这样几种类型[basestring|str|unicode],其中str和Unicode是集成自basestring的
  • 创建的字符串s = "abc"是str类型的,在python2中是bytes字节类型的
# 默认情况下
>>> s = "中文"
>>> s
>>> '\xd6\xd0\xce\xc4'
# 如果在声明的时候就需要一个中文字符串,在字符串的前面添加一个u字符,表示是通过unicode编码的.
>>> s = u'中文'
>>> s
>>> u'\u4e2d\u6587'
# 如果是默认字节形式的中文字符串,要得到原本的中文形式,需要decode()函数操作
>>> s = "中文"
>>> s
>>> '\xd6\xd0\xce\xc4'
>>> x = s.decode('gbk')
>>> x
>>> u'\u4e2d\u6587'
# 如果要将一个unicode编码的字符串转换成ascii编码进行后续的操作.
# 为什么要转化成ascii编码?
# 因为python内置的大量模块,并没有提供中文支持,调用内置模块的函数操时,如果出现非ascii编码,就会出现ascii编码不支持的错误.
>>> UnicodeEncodeError: 'ascii' codec can't encode characters
# 将unicode字符串,转换成bytes类型的str字符串
# 转换方式:
>>> s = u'中文'
>>> s
>>> u'\u4e2d\u6587'
>>> x = s.encode("gbk")
>>> x
>>> '\xd6\xd0\xce\xc4'
  • python2中, 将一个字符串确定类型[str|unicode],然后根据实际的类型进行操作
    • 如果是用于控制台等等展示操作(给人看):字符的方式展示
    • 如果是用于python2内建模块惊醒使用(python2使用):字节的方式使用
  • 警告
    • python2中的str类型,默认就有一个encode()函数,但是这个函数只是在定义时为了对象操作的完整性出现的,使用会直接报错[预计-保留函数]
    • python2中的unicode类型,默认有一个decode()函数,同样不要去使用!

python2编码解码的问题~字符串

  • 核心:字节和字符之间的转换
  • 字节:专门给程序员使用[python2内建的模块,并不是支持中文,如~写入文件write()]
  • 字符:给用户看
  • python2内置字符串[basestring<-|str|unicode]
  • 默认创建的字符串str类型的,bytes字节类型
  • 字节类型str->字符类型unicode:s.decode("utf-8")
  • 字符类型unicode->字节类型str:s.encode("utf-8")
    • 默认encode("ascii")

相关文章

网友评论

      本文标题:python2的编码和解码问题

      本文链接:https://www.haomeiwen.com/subject/alcznxtx.html