zoukankan      html  css  js  c++  java
  • python3中的编解码

    #一个知识点是:python3中有两种字符串数据类型;str类型和 bytes类型;sty类型存储unicode数据,bytes类型存储bytes数据

    #当我们在word上编辑文件的时候,数据保存之前是以unicode形式保存在内存中的
    #当我们点击保存时,数据将通过编辑器的编码方式(如UTF-8、gbk)编码成bytes的字节串存储在硬盘上,优势是可以节省存储空间------encode
    #当我们又重新打开文件时,word又将这些bytes的字节串解码城unicode形式放在内存中,数据就以明文形式展示给我们了---------decode


     1 import json
     2 s='芳芳'
     3 print(type(s)) #<class 'str'>
     4 print(repr(s)) #显示存储内容 #'芳芳'
     5 print(json.dumps(s)) #"u82b3u82b3" ;json.dumps将数据通过特殊方式转换成所有程序语言都认识的字符串
     6 
     7 b=s.encode("utf-8")
     8 print(type(b)) #<class 'bytes'>
     9 print(repr(b)) # b'xe8x8axb3xe8x8axb3'
    10 
    11 u=b.decode("utf-8")
    12 print(type(u)) #<class 'str'>
    13 print(repr(u)) #'芳芳'
    14 print(json.dumps(u))#"u82b3u82b3"

    socket通信中的编解码

    socket消息send()方法发送的数据是 bytes类型

    客户端消息以bytes数据类型发送到服务端,服务端接收到消息后,使用decode("utf-8")进行解码,解码后展示为中文

    服务端接受消息后,也以bytes数据类型发送回应消息到客户端,客户端接收到消息后,同样需要decode("utf-8")进行解码,解码后展示为中文

    客户端代码

     1 import socket
     2 client=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
     3 client.connect(("127.0.0.1",8090))
     4 while True: #通信循环,可以不断的通信,收发消息
     5     msg=input(">>:")
     6 #    print(type(msg)) #input 得到的数据类型是<class 'str'>
     7     client.send(msg.encode("utf-8")) #发送的数据类型为<class 'bytes'>
     8     print("%s 已经发送到服务端" %msg.encode("utf-8"))
     9 
    10     data=client.recv(1024)
    11     print("从服务端接收的数据是: %s " %data )# 接收的数据 类型是<class 'bytes'>
    12     print("从服务端接收的数据解码后: %s " % data.decode("utf-8")) #解码后数据类型是<class 'str'>
    13 
    14     print("从服务端接收的数据解码后的数据类型是: %s " % type(data.decode("utf-8")))  # 解码后数据类型是<class 'str'>

    客户端发送、接受消息

    服务端代码:

     1 import socket
     2 phone=socket.socket(socket.AF_INET,socket.SOCK_STREAM) #生成一个socket实例
     3 phone.setsockopt(socket.SOL_SOCKET,socket.SO_REUSEADDR,1)
     4 phone.bind(("127.0.0.1",8090)) #将socket 绑定到地址,地址使用元组形式(host,port)
     5 phone.listen(5) #监听传入链接,最大连接数量设置为5
     6 
     7 while True: #接收链接循环
     8     conn,addr=phone.accept()#接受连接并返回,其中conn是新的socket对象,可以用来接收和发送数据;addr是连接客户端的地址
     9     print('客户端的地址是 :',addr) #接收到的客户端地址
    10     while True:#通信循环,可以不断的通信,收发消息
    11         try:
    12             data=conn.recv(1024) #接受socket数据,数据以字符串的形式返回,设置最多可以接收的数据量是1024字节
    13             if not data: break  # 针对linux,客户端断开链接的异常处理
    14             print("从客户端接收到的消息是 %s " %data)#data 的数据类型是 <class 'bytes'>
    15             print("从客户端接收消息经过解码后是 :%s " %data.decode("utf-8"))
    16 
    17             print("从客户端接收消息解码后数据类型是 :%s" % type(data.decode("utf-8"))) #解码后数据类型是<class 'str'>
    18 
    19             conn.send(data.upper())
    20             print("%s 已经从服务端发送到客户端"%data.upper())
    21         except Exception:
    22             print("Exception")
    23             break
    24     conn.close()
    25 phone.close()

    服务端接受、发送消息

  • 相关阅读:
    【WPF】自定义CheckBox复选框
    如何在WPF中引用Windows.System.Forms.Integration
    【转载】wpf DataGrid自动显示行号
    C#网络编程(订立协议和发送文件) Part.4
    C#网络编程(接收文件) Part.5
    状态模式
    C#网络编程(同步传输字符串) Part.2
    我的一个自己写的更新缓存的aop实例
    C#网络编程(基本概念和操作) Part.1
    mssql根据分类查询每个分类前100条数据 表名m_data,分类字段名m_type
  • 原文地址:https://www.cnblogs.com/shenfangfang/p/6797304.html
Copyright © 2011-2022 走看看