Python解析Socket数据流异常bytes的问题(详细)


本文摘自php中文网,作者不言,侵删。

本篇文章给大家带来的内容是关于Python解析Socket数据流异常bytes的问题(详细),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。

python在通过socket发送数据时,英文字符转义后为原来本身的字符,占一个字节(如:s转移后为s),而中文字符在转义后需要二个字节来标识一个中文字符(如:钟转义后为\x92\x9f)。在发送端是不存在问题的,而发生问题的主要是在socket客户端。因为客户端在接受数据流时,每次接受都是有字节限制,就会出现一个中文字符分两次接受,从而导致每次接受的流在转义成字符时报错UnicodeDecodeError。

当前有数据流:

1

bmsg = b'\xe5\x88\x86\n\xe9\x92\x9f' # 分\n钟

正常接受并转义为:

1

2

smsg = str(bmsg, 'utf-8')   #方式一 或

smsg = bmsg.decode()  # 方式二 第一参数默认utf8,第二参数默认strict,还有 ignore (忽略)、 replace (替代=?)

如果现在接受到的数据流为

1

bmsg = b'\xe5\x88\x86\n\xe9\x92'    # \x9f 作为下次接受

如何避免程序的异常退出,有两种处理方式:
1)数据丢失处理
此时,如果再用正常接受方式转义bytes流,就会出现 UnicodeDecodeError 异常,为使不报异常,我们在转义时,通过方式二,指定第二个参数为 ignore,如下:

1

smsg = bmsg.decode('utf-8', 'ignore') # 输出: 分\n  ,如果为 replace 则 \n 后为 ?

阅读剩余部分

相关阅读 >>

Python中表示字符串的几种方法介绍

Python 多维切片之冒号和三个点

vs可以写Python

Python是面向对象的语言吗

使用Python时多少有人走过的坑!避险!

Python和r哪个更难

Python进阶看什么书

什么是Python函数

Python扫描proxy并且如何获取可用代理ip的示例分享

有关Python的md5加密用法详解

更多相关阅读请进入《Python》频道 >>




打赏

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,您说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

分享从这里开始,精彩与您同在

评论

管理员已关闭评论功能...