zoukankan      html  css  js  c++  java
  • python2.7.x的字符串编码到底什么鬼?(中文和英文的处理)

    一直以来我其实一直对python的编码弄得非常晕,能正常编码,也能处理一些情况。但是始终不明白有些问题究竟为何出,原因是什么,为什么要这样用。

    今天晚上正好好好研究了一番解答了自己心中的困惑。

    Q:python2.7.x里面的中文表示到底是什么鬼?

    A:直接来看看

    In [23]: x = '好不好喝都要喝'
    
    In [24]: x
    Out[24]: 'xe5xa5xbdxe4xb8x8dxe5xa5xbdxe5x96x9dxe9x83xbdxe8xa6x81xe5x96x9d'

    这个x打印值相信熟悉编码的盆友都知道,这是utf-8编码。也就是说python2.7.x 在默认情况下将中文默认转到了utf-8编码。

    这里type(x)得到结果是str

    Q:python2.7.x里的unicode究竟什么鬼?

    A:还是通过例子来看看

    In [16]: x = u'好不好喝就很好喝'
    
    In [17]: type(x)
    Out[17]: unicode

    在2.7.x在中,u写在字符串前面将会将一个字符串转成unicode对象。

    Q:python2.7.x中unicode可以和str相加吗?

    A:还是来看例子

    In [62]: z = '好不好喝'
    
    In [63]: x = u'好不好喝都要喝'
    
    In [64]: z+x
    ---------------------------------------------------------------------------
    UnicodeDecodeError                        Traceback (most recent call last)
    <ipython-input-64-f964ff206363> in <module>()
    ----> 1 z+x
    
    UnicodeDecodeError: 'ascii' codec can't decode byte 0xe5 in position 0: ordinal not in range(128)

    熟悉的报错,可见在python2.7.x中,unicode中文和utf8中文是不能相加的因为是不同类型。

    Q:那么英文字符串可以相加吗?

    A:可以。具体就不掩饰了大家可以自己试试。而且最终得到的结果会被转成全unicode

    这两个库在对无论utf8还是unicode对象进行中文编码的时候,都会将内容转成unicode再编码。最后你拿到结果decode之后就变成了unicode对象,想要再拿到utf8对象,就需要再encode一次才可以了。

    一不注意就踩坑。

  • 相关阅读:
    EasyDarwin云平台:EasyCamera开源摄像机接入海康威视摄像机PS流转ES流
    详解Base64编码和解码
    codeblocks主题修改(vim)
    破解swf文件
    StarUML使用说明-指导手册
    codeBlocks编译undefined reference to错误
    C_文件包含.h文件和包含.c文件总结
    C的面向对象编程
    如何在Windows环境搭建Object C开发环境
    net开源项目
  • 原文地址:https://www.cnblogs.com/piperck/p/5460416.html
Copyright © 2011-2022 走看看