• 补充:bytes类型以及字符编码转换


    定义

    bytes类型是指一堆字节的集合,在python中以b开头的字符串都是bytes类型

    b'xe5xb0x8fxe7x8cxbfxe5x9cx88' #b开头的都代表是bytes类型,是以16进制来显示的,2个16进制代表一个字节。 utf-8是3个字节代表一个中文,所以以上正好是9个字节
    ps:因为1个16进制能最大表示15个字符,和二进制4位表示的一样,所以2个16进制代表8位二进制,一个字节。
    

    Bytes类型的作用

    计算机只能存储2进制, 我们的字符、图片、视频、音乐等想存到硬盘上,也必须以正确的方式编码成2进制后再存。

    • 对于文字,我们可以以gbk编码,也可以以utf-8、ASCII编码。
    • 对于图片,必须编码成PNG,JPEG等格式
    • 对于音乐,必须编码成MP3,WAV等

    在python中, 数据转成2进制后不是直接以0101010的形式表示的,而是用一种叫bytes(字节)的类型来表示,人类不可读。字符串转成bytes后长成这个样子

    >>> s = "小猿圈">>> s.encode("utf-8")  # 以utf-8编码 b'xe5xb0x8fxe7x8cxbfxe5x9cx88' #b开头的都代表是bytes类型,是以16进制来显示的,2个16进制代表一个字节。 utf-8是3个字节代表一个中文,所以以上正好是9个字节
    

    在python中,字符串必须编码成bytes后才能存到硬盘上。 唉,你说,我之前学的文件操作时也没有把字符串编码后再存呀, 哈,那是python默认帮你干了这个事,在python3中文件存储的默认编码是utf-8.

    当然你可以自行改变文件的默认编码,但意味着你存的数据

    f = open(file="encode_test",encoding="gbk",mode="w")
    

    这样,你写入的数据就是按gbk编码的了。

    以二进制模式操作文件

    当然,在打开文件时如果你不想让open这个对象帮你自动编码,你也可以直接往文件里存入bytes数据。

    f = open(file="encode_test",mode="wb") # wb以2进制模式打开文件s = "自学编程,谁不上小猿圈".encode("utf-8")  # 自行编码print(s )f.write(s)f.close()
    #以下是print(s)的输出b'xe8x87xaaxe5xadxa6xe7xbcx96xe7xa8x8bxefxbcx8cxe8xb0x81xe4xb8x8dxe4xb8x8axe5xb0x8fxe7x8cxbfxe5x9cx88'
    

    2进制模式打开文件有

    • wb 二进制创建
    • rb 二进制读
    • ab 二进制追加

    编码转换是指将一种编码转成另外一种编码,比如 utf-8 to gbk。

    为何需要编码转换呢? 因为不同操作系统编码不同, utf-8在win上没办法直接看,因为windows是GBK编码的,得转成gbk。 反过来如果你的GBK字符相在LinuxMac上正常显示,就得转成utf-8编码。

    编码&解码

    s.encode('utf-8')以utf-8编码成2进制
    s.decode('utf-8')从2进制解码成unicode str

    >>> s.encode("utf-8")   # 编码b'xe5xb0x8fxe7x8cxbfxe5x9cx88'>>> s_utf8=s.encode("utf-8")>>> >>> s_utf8.decode("utf-8")  #解码'小猿圈'
    

    在py3里,内存里的字符串是以unicode编码的,unicode的其中一个特性就是跟

    所有语言编码都有映射关系。所以你的utf-8格式的文件,在windows电脑上若是不能看,就可以把utf-8先解码成unicode,再由unicode编码成gbk就可以了。

    注意,不管在Windows or Mac or Linux上,你的pycharm IDE都可以支持各种文件编码,所以即使是utf-8的文件,在windows下的pycharm里也可以正常显示

    内容转自小猿圈链接:https://book.apeland.cn/details/41/

  • 相关阅读:
    python无意中发现的
    mysql 中关于周和月份的表示
    列表表达式
    python编码
    bugfree安装
    python练习题代码
    根据用户名或者厂商名称生成相关的弱口令
    获取QQ企业邮箱通讯录PY脚本
    SQL注入POC
    乌云精华漏洞爬取匹配
  • 原文地址:https://www.cnblogs.com/hanfe1/p/11493191.html
Copyright © 2020-2023  润新知