python3中的编解码
#一个知识点是:python3中有两种字符串数据类型;str类型和 bytes类型;sty类型存储unicode数据,bytes类型存储bytes数据
#当我们在word上编辑文件的时候,数据保存之前是以unicode形式保存在内存中的
#当我们点击保存时,数据将通过编辑器的编码方式(如UTF-8、gbk)编码成bytes的字节串存储在硬盘上,优势是可以节省存储空间------encode
#当我们又重新打开文件时,word又将这些bytes的字节串解码城unicode形式放在内存中,数据就以明文形式展示给我们了---------decode
import json
s='芳芳'
print(type(s)) #<class 'str'>
print(repr(s)) #显示存储内容 #'芳芳'
print(json.dumps(s)) #"\u82b3\u82b3" ;json.dumps将数据通过特殊方式转换成所有程序语言都认识的字符串 b=s.encode("utf-8")
print(type(b)) #<class 'bytes'>
print(repr(b)) # b'\xe8\x8a\xb3\xe8\x8a\xb3' u=b.decode("utf-8")
print(type(u)) #<class 'str'>
print(repr(u)) #'芳芳'
print(json.dumps(u))#"\u82b3\u82b3"
socket通信中的编解码
socket消息send()方法发送的数据是 bytes类型
客户端消息以bytes数据类型发送到服务端,服务端接收到消息后,使用decode("utf-8")进行解码,解码后展示为中文
服务端接受消息后,也以bytes数据类型发送回应消息到客户端,客户端接收到消息后,同样需要decode("utf-8")进行解码,解码后展示为中文
客户端代码
import socket
client=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
client.connect(("127.0.0.1",8090))
while True: #通信循环,可以不断的通信,收发消息
msg=input(">>:")
# print(type(msg)) #input 得到的数据类型是<class 'str'>
client.send(msg.encode("utf-8")) #发送的数据类型为<class 'bytes'>
print("%s 已经发送到服务端" %msg.encode("utf-8")) data=client.recv(1024)
print("从服务端接收的数据是: %s " %data )# 接收的数据 类型是<class 'bytes'>
print("从服务端接收的数据解码后: %s " % data.decode("utf-8")) #解码后数据类型是<class 'str'> print("从服务端接收的数据解码后的数据类型是: %s " % type(data.decode("utf-8"))) # 解码后数据类型是<class 'str'>
客户端发送、接受消息

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

python3中的编解码的更多相关文章
- python3的base64编解码
使用python3的base64编解码实现字符串的简易加密解密 引言: 在一些项目中,接口的报文是通过base64加密传输的,所以在进行接口自动化时,需要对所传的参数进行base64编码,对拿到的响应 ...
- Java 字符编码(二)Java 中的编解码
Java 字符编码(二)Java 中的编解码 java.nio.charset 包中提供了一套处理字符编码的工具类,主要有 Charset.CharsetDecoder.CharsetEncoder. ...
- Java 字符编码(三)Reader 中的编解码
Java 字符编码(三)Reader 中的编解码 我们知道 BufferedReader 可以将字节流转化为字符流,那它是如何编解码的呢? try (BufferedReader reader = n ...
- python3中编码与解码的问题
python3中编码与解码的问题 ASCII .Unicode.UTF-8 ASCII 我们知道,在计算机内部,所有的信息最终都表示为一个二进制的字符串.每一个二进制位(bit)有0和1两种状态,因此 ...
- 搞清tomcat中的编解码
http://www.xuebuyuan.com/1287083.html *********************************** 经常会被乱码问题搅得头晕脑胀.事实上,乱码问题涉及的 ...
- python中的编解码小结
在用python27写文件或者上传文件时遇到这样一个问题:.在网上搜了下说加入以下三行代码可以解决: import sys reload(sys) sys.setdefaultencoding('ut ...
- 使用python3的base64编解码实现字符串的简易加密解密
import base64 copyright = 'Copyright (c) 2012 Doucube Inc. All rights reserved.' def main(): #转成byte ...
- Java Web中涉及的编解码
用户从浏览器发起一个HTTP请求,存在编码的地方是URL.Cookie.Paramiter.服务器端接收到HTTP请求后要解析HTTP协议,其中URL.Cookie和POST表单参数要解码,服务器端可 ...
- 转 python3中SQLLIT编码与解码之Unicode与bytes
#########sample########## sqlite3.OperationalError: Could not decode to UTF-8 column 'logtype' with ...
随机推荐
- 02-HTML5新的input属性
本节重点 HTML5 拥有多个新的表单输入类型.这些新特性提供了更好的输入控制和验证 本节介绍新的输入类型: date datetime datetime-local email month numb ...
- conda常用命令总结
conda 一些背景历史以及如何安装这里就不说了,因为实在是漫天都在飞,随便都能找到相关的资料.我这里只是将平时常用到的 Conda 命令进行汇总,以备不时之需,因为我也是一个忘性极大的人,实在是记不 ...
- 函数和常用模块【day06】:re模块(九)
本节内容 1.简述 2.常用的正则表达式符号 3.常用匹配方法 4.常用方法 5.反斜杠的困扰 6.其他匹配模式 7.总结 一.简述 就其本质而言,正则表达式(或 RE)是一种小型的.高度专业化的编程 ...
- SQL记录-资源正忙online或nowait
1.多个tomcat 修改3个端口 2.oracle-00054:资源正忙 被锁住了 建立索引加online参数 1:创建索引时会产生的锁 2:dml 语句会产生的锁 3:索引创建时加上关键字 onl ...
- POJ - 1905 Expanding Rods(二分+计算几何)
http://poj.org/problem?id=1905 题意 一根两端固定在两面墙上的杆,受热后变弯曲.求前后两个状态的杆的中点位置的距离 分析 很明显需要推推公式. 由②的限制条件来二分角度, ...
- ZOJ 4019 Schrödinger's Knapsack
Schrödinger's Knapsack Time Limit: 1 Second Memory Limit: 65536 KB DreamGrid has a magical knap ...
- Failed to write core dump. Minidumps are not enabled by default on client versions of Windows
使用JProfiler监控JAVA程序内存,JVM报错: A fatal error has been detected by the Java Runtime Environment: EXCEPT ...
- Keil软仿真STM32
当使用Keil软仿真STM32时,SystemClock设置为72MHz,使用循环延迟1s钟,实际时间明显大于1S钟,但是Keil调试窗口显示的确实是1s钟//毫秒级的延时void delay_ms( ...
- C++内存管理(转)http://www.cnblogs.com/qiubole/archive/2008/03/07/1094770.html
[导语] 内存管理是C++最令人切齿痛恨的问题,也是C++最有争议的问题,C++高手从中获得了更好的性能,更大的自由,C++菜鸟的收获则是一遍一遍的检查代码和对C++的痛恨,但内存管理在C++中无处不 ...
- Postfix 邮件服务 - DNS服务
DNS 服务 (系统需要配置静态 IP 地址) yum install bing* -y 一.配置 NDS 域名解析: 直接添加以下内容: [root@mail ~]# cat /etc/named. ...