zoukankan      html  css  js  c++  java
  • python2与python3的bytes问题

    >>> s  = '编程'
    >>> print s
    编程
    >>> s
    'xe7xbcx96xe7xa8x8b'
    >>>

    在python2中直接调用字符串的变量的话,会打印其bytes(可以理解成用16进制表示字符串的内存地址,本质还是二进制)。在python2中,bytes和str是一回事。

    为什么要有个bytes呢?。因为所有数据本质都是用二进制进行储存的,当传输数据的时候,要把这些数据先转换成二进制( bytes)在进行传输。除此之外,python2里还有个单独的数据类型,把字符串解码后,就会变成unicode。

    >>> s
    'xe8xb7xafxe9xa3x9e' #utf-8
    >>> s.decode('utf-8')
    u'u8defu98de' #unicode 在unicode编码表里对应的位置
    >>> print(s.decode('utf-8'))
    路飞 #unicode 格式的字符

    原因是python2的默认编码是ASCII,后来为了支持多国语言,就想弄个unicode。但是直接把ASCII转成unicode是很费劲的,所以龟叔直接搞了一个新的字符类型,就叫unicode,说白了就是你得在内存里先把字符串存成unicode类型

    2008年python3出世,来了个大变革:

    1. 把字符串的编码变成了unicode,文件默认编码变成了utf-8。
    2.  把str 和bytes 做了明确区分, str 就是unicode格式的字符, bytes就是单纯二进制

    还有一个很重要的是,在python3中,只有unicode给你展示字形,其他的编码一律用bytes展示,也就是说要你强制使用unicode。

    最后再提示一下,Python只要出现各种编码问题,无非是哪里的编码设置出错了
    常见编码错误的原因有:

        • Python解释器的默认编码
        • Python源文件文件编码
        • Terminal使用的编码
        • 操作系统的语言设置

    参考:https://www.cnblogs.com/alex3714/articles/7550940.html

  • 相关阅读:
    WebView in ScrollView:View not displayed because it is too large to fit into a software layer
    No implementation found for void `org.webrtc.PeerConnectionFactory.initializeAndroidGlobals(android.content.Context, boolean)
    孤掌难鸣-------钟摆
    孤掌难鸣-------防碰
    孤掌难鸣-------整拖
    孤掌难鸣-------特殊粘卡
    ashx 文件 与js文件数据交互
    JavaScrip实现3D旋转动态效果
    TC SRM 607 DIV2
    UVALive
  • 原文地址:https://www.cnblogs.com/lshedward/p/9926150.html
Copyright © 2011-2022 走看看