美文网首页Python学习之旅
Python2编码的问题

Python2编码的问题

作者: 依旧丶森 | 来源:发表于2018-01-20 18:01 被阅读3次

1.怀念python3

python3默认情况下,是通过unicode直接编码操作的,对于字符串、特殊字符、数字的支持都是一致的,字符串的编码和解码操作方式非常简洁。

   #字符串构造了一个str对象,默认情况下就是通过unicode直接编码的字符
   >>> s = "中文"
   #如果将字符转换成字节,进行编码操作:s.encode(“utf-8”)
   >>> 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")
   '中文'

2. 吐槽python2

python2中,默认情况下是通过ascii编码进行操作的。
python2中的字符串有这样几种类型 [basestring | str | unicode]
其中 str 和 unicode 是继承自 basestring 的。

糟心的来了:python2中创建的字符串s=”abc”是str类型的,但在python2中是 str 是 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'
  • 为什么python2中要将 unicode 编码的字符串转换成 ascii 编码进行后续的操作?

    因为python内置的大量模块,并没有提供中文支持,调用内置模块的函数操作时,如果出现了非 ascii 编码,就会出现 ascii编码不支持的错误
    UnicodeEncodeError: 'ascii' codec can't encode characters

        将unicode字符串,转换成bytes类型的str字符串
        >>> s
        u'\u4e2d\u6587'
        >>> xs.encode("gbk")
        >>> x = s.encode("gbk")
        >>> x
        '\xd6\xd0\xce\xc4'
    
    
  • python2编码解码的问题——字符串

    • 核心:字节和字符之间的转换
    • 字节:专门给程序使用【python2内建的模块,如~写入文件】
    • 字符:给用户看
      • 默认创建的字符串str类型的,bytes字节类型
      • 字节类型 str ->字符类型 unicode:s.decode(“utf-8”)
      • 字符类型 unicode ->字节类型 str: s.encode(“utf-8”)
          # 默认encode(“ascii”)

      警告:python2中的str类型,默认就有一个encode()函数,但是这个函数只是在定义时为了对象操作的完整性出现的,使用会直接报错。
      python2中的unicode类型,默认有一个decode()函数,同样不要去使用!

相关文章

  • python 编码问题总结记录

    Python2的默认编码ASCII,这是python编码问题的根本原因,可以想象,python3的编码问题肯定没有...

  • Python2和Python3的区别

    编码方式 编码 python2的默认编码是ascii,所以会导致经常会遇到编码问题文件中经常会写# coding=...

  • 学习资料

    简明python教程Python2字符编码问题小结stackoverflow about python

  • Python2编码问题

    Python2 源码编码 python2源码默认使用ascii进行编码,当源码中出现中文字符等非ascii编码的字...

  • Python2 编码问题

    一些定义 字符(character)字符是文字的最小的组成单位,其为一种抽象定义(不要与 java 或 c 中的 ...

  • python2编码问题

    由于工作的需要,用了很久的python3又转回来用Python2,所以编码问题又摆在了面前。先看一下python2...

  • Python2 编码问题

    python使用unicode作为中间编码 s.decode('gb2312') 表示将s以gb2312的方式解码...

  • python2 编码问题

    from future import unicode_literals import sysreload(sys)...

  • Python2编码问题

    Python2中系统默认编码是ASCII码,即使在文件中声明了coding为utf-8,在执行str(unicod...

  • python2的编码问题

    新手遇到编码问题都是很头疼的问题。 这个时候str(a)就报错了。?[0;31mUnicodeEncodeErro...

网友评论

    本文标题:Python2编码的问题

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