Python3 编码

Python3中 socket通信中 都是通过bytes数据进行数据传输,且音频 视频数据都是bytes编码,所以在此对编解码记录范例

输入如下:

import sys
  
s = "你好" 
  
print(s)
"""
    encode(encoding='UTF-8',errors='strict')
         以 encoding 指定的编码格式编码字符串,如果出错默认报一个ValueError 的异常,
         除非 errors 指定的是'ignore'或者'replace'

"""
print(s.encode(encoding = "utf-8")) 
print(s.encode(encoding = "gbk"))
"""       
    bytes.decode(encoding="utf-8", errors="strict")
    Python3中没有 decode方法,但我们可以使用 bytes对象的 decode()方法来解码给定的 bytes对象,
         这个 bytes对象可以由 str.encode()来编码返回。
"""
print(s.encode(encoding = "utf-8").decode(encoding = "utf-8"))
print(s.encode(encoding = "gbk").decode(encoding = "gbk"))

输出如下:

你好
b'\xe4\xbd\xa0\xe5\xa5\xbd'
b'\xc4\xe3\xba\xc3'
你好
你好

 

 

其中b 代表bytes类型数据

 

 

Python的字符串类型是str,在内存中以Unicode表示,一个字符对应若干个字节。如果要在网络上传输,或者保存到磁盘上,就需要把str变为以字节为单位的bytesPython对bytes类型的数据用带b前缀的单引号或双引号表示:

 

编码内容更新:

输入如下:

'''
    Python的字符串类型是str,在内存中以Unicode表示,
         一个字符对应若干个字节。如果要在网络上传输,或者保存到磁盘上,就需要把str变为以字节为单位的bytes。
'''
"""Unicode表示的str通过encode()方法可以编码为指定的bytes
    纯英文的str可以用ASCII编码为bytes,内容是一样的,
    含有中文的str可以用UTF-8编码为bytes。含有中文的str无法用ASCII编码,
    因为中文编码的范围超过了ASCII编码的范围,Python会报错。
"""
print('ABC'.encode('ascii'))
print('中文'.encode('utf-8'))

'''
    反过来,如果我们从网络或磁盘上读取了字节流,那么读到的数据就是bytes。
    要把bytes变为str,就需要用decode()方法:
'''
print( b'ABC'.decode('ascii'))
print(b'\xe4\xb8\xad\xe6\x96\x87'.decode('utf-8'))

"""
    计算str包含多少个字符
"""
print(len('ABC'))
print(len('中文'))

"""
    len()函数就计算字节数
    1个中文字符经过UTF-8编码后通常会占用3个字节,而1个英文字符只占用1个字节。
        为了避免乱码问题,应当始终坚持使用UTF-8编码对str和bytes进行转换
"""
print(len(b'ABC'))
print(len(b'\xe4\xb8\xad\xe6\x96\x87'))
print(len('中文'.encode('utf-8')))
"""
        当你的源代码中包含中文的时候,在保存源代码时,就需要务必指定保存为UTF-8编码
       通常在文件开头写上这两行 
    #!/usr/bin/env python3
    # -*- coding: utf-8 -*-
"""

输出为:

b'ABC'
b'\xe4\xb8\xad\xe6\x96\x87'
ABC
中文
3
2
3
6
6

utf-8 是unicode的扩展级

所有格式的编码转换都需要先转为unicode 再转为其他类型,即需要unicode作为中转

六、有兴趣接电子设计相关小型项目的请加下群,每个项目一般在1000元以内,非诚勿扰

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值