设为首页收藏本站

Crossin的编程教室

 找回密码
 立即加入
查看: 11611|回复: 5
打印 上一主题 下一主题

创建客户端、服务器过程中格式问题

[复制链接]

6

主题

2

好友

654

积分

实习版主

Rank: 7Rank: 7Rank: 7

跳转到指定楼层
楼主
发表于 2017-12-8 18:15:19 |只看该作者 |倒序浏览
本帖最后由 TED 于 2017-12-8 18:29 编辑

最近看到Python核心编程(第二版),第16章网络编程 16.3.6 创建一个UDP服务器,在跑给的源代码例子时,出了点关于bytes、str格式的问题,试着改格式也没成功,求指点:

12.8.2.PNG

在客户端接收的data这里,红线圈的这句我想把data 由bytes转str,但下面接收的data 再print出来,为什么还是b'形式?
12.8.01.jpg

附件里我加了py文件,并不是原书带的原码了,我乱改了些。。py3格式的



代码.rar

776 Bytes, 下载次数: 0

相关py文件

回复

使用道具 举报

0

主题

0

好友

20

积分

新手上路

Rank: 1

沙发
发表于 2017-12-8 19:24:37 |只看该作者
你需要decode,而不是encode。
回复

使用道具 举报

6

主题

2

好友

654

积分

实习版主

Rank: 7Rank: 7Rank: 7

板凳
发表于 2017-12-8 21:13:20 |只看该作者
kickccat 发表于 2017-12-8 19:24
你需要decode,而不是encode。

问题好像不是出在这
这里我用的时str 和 bytes的相互转换 str(bytes,encoding="utf-8")  和 bytes(str,encoding="utf-8")
等同于您提的这个 str.encode(s) 和 bytes.decode(b)

相关链接: https://www.cnblogs.com/solakevon/p/6010717.html
回复

使用道具 举报

6

主题

2

好友

654

积分

实习版主

Rank: 7Rank: 7Rank: 7

地板
发表于 2017-12-8 21:38:52 |只看该作者
问题解决了~
之前我试着把bytes转成str,确实是成功了,多加一句print(type(data))输出的确实是str,要注意,这里的str 指的是我用红线圈出来的一整部分,包含蓝线圈出来的两部分,第一个蓝圈框出来的[...]已经是正常的str类型了,右半部分的蓝圈里面还是bytes,所以要找回这部分的代码,把它的格式由bytes转回str.
12.8.3.jpg

因为最终data 前半部分是和time相关的,想快速找的话直接找关于time的函数就好了,如下图'[%s]%r' 整体为string,但其中%r 对应的是data 此时还是bytes,所以导致最终右半部分是bytes格式,所以只要再把这里改掉就好了
12.8.4.PNG

接下来就把此处的data格式由bytes转str就好了,为了证明此处的 str(bytes,encoding="utf-8")也能正常将bytes转str,我用decode 和这方法同时试了下 结果都能正常显示了~
12.8.6.PNG 12.8.5.PNG


回复

使用道具 举报

6

主题

2

好友

654

积分

实习版主

Rank: 7Rank: 7Rank: 7

5#
发表于 2017-12-8 21:55:25 |只看该作者
至于python2为什么不用涉及str和bytes相互转化,直接就能运行,在这,我把原书的源代码python2版本的代码贴在这,让同学帮忙跑了下,是直接可以显示汉字的 12.8.8.PNG 12.8.7.PNG

可能是python2时bytes没有意义,在python3中对bytes做了严格的区分?(看了下面两个链接做的小结论吧,之后确定了再来修改)
https://www.cnblogs.com/wuwen19940508/p/6760018.html
https://www.cnblogs.com/chownjy/p/6625299.html

回复

使用道具 举报

6

主题

2

好友

654

积分

实习版主

Rank: 7Rank: 7Rank: 7

6#
发表于 2017-12-14 17:29:53 |只看该作者
在看了python核心编程第三版P54关于2,3版本的差异已经附录中关于其编码的解释,个人理解现在是这样:
python2中默认脚本文件是ASCII编码,分str字符串和unicode字符串;而到了python3中,默认脚本文件是unicode编码,python2中的str字符串变成了 3中的bytes,unicode字符串成为了3中的str.(见python核心编程第三版P616)
所以说当用到python3时,bytes作为保存数据的类型,str作为保存文本的类型,在传输数据过程中是bytes,输入内容和获取了数据转化为显示的都是文本str,要实现其转化;而2里面,并没有对数据和文本进行区分,不用转换。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即加入

QQ|手机版|Archiver|Crossin的编程教室 ( 苏ICP备15063769号  

GMT+8, 2024-5-10 07:10 , Processed in 0.028562 second(s), 24 queries .

Powered by Discuz! X2.5

© 2001-2012 Comsenz Inc.

回顶部