在写python 串口程序时,想在窗口的文本框区域将串口每次接收到的数据能够换行显示,碰到两个问题:
1. 字节与字符串的转换;
2. 由于用wxpython做python的UI开发,文本框区域的换行显示;
先系统学习一下字节与字符串的转换的知识:
实例当中涉及到的代码:
self.message_data = ''
self.message=self.ser.serSer.readline()
self.m_textCtrl3.AppendText(self.message)
虽然在文本框里看不出有什么字节与字符串的区别,但是 用
print(self.message) 打印显示 就会是 b‘XXX’这种格式
先看两种将字节转为字符串的方法:
# bytes to str 字节转字符串
str(bytes, encoding="utf-8")
# bytes to str 字节转为字符串
bytes.decode(bytes)
所以以上代码可以这样改:
self.m_textCtrl3.AppendText(str(self.message, encoding="utf-8"))
self.m_textCtrl3.AppendText(bytes.decode(self.message))
加深有关编码转换的问题:
1、如果没有设置字符串编码格式,那么将采用系统默认编码格式
name = 'zifuchuan' # 采用系统默认编码格式 nameBytes = name.encode('utf-8') # 先将 name 解码(采用系统默认格式),然后用 'utf-8' 编码 nameStr = nameBytes.decode('utf-8') # 用什么格式编码就需要用同样格式去解码,否则出错
说明:
name.encode('utf-8') 此处将 name 重新编码为 'utf-8',要重新编码首先要解码,此处并没有指明解码方式,那么将采用系统的默认解码格式(编解码格式相同,不会出错)
2、主动设置字符串编码格式为 'utf-8',假设系统编解码格式为 'ascii'
# -*- coding: utf-8 -*- name = 'zifuchuan' # 采用指定的编码格式 'utf-8' nameBytes = name.encode('utf-8') # 这里出错了
说明:
上一个例子编码成 'utf-8' 是正常的,因为编解码格式相同
此处编码采用 'utf-8'格式,并没有指明解码方式,那么将采用系统的默认解码格式(即 'ascii', 编解码格式不相同,出错),修正方法有两种,如下所示
明确指定解码格式 # -*- coding: utf-8 -*- name = 'zifuchuan' # 采用指定的编码格式为 'utf-8' nameBytes = name.decode('utf-8').encode('utf-8')
修改默认解码格式 # -*- coding: utf-8 -*- import sys sys.setdefaultencoding('utf-8') name = 'zifuchuan' # 采用指定的编码格式 'utf-8' nameBytes = name.encode('utf-8')
python:字符串转换成字节的三种方式
str='zifuchuan'
第一种 b'zifuchuan'
第二种 bytes('zifuchuang',encoding='utf-8')
第三种 ('zifuchuang').encode('utf-8')
再附加一条,未做测试。
# an alternative method
# str to bytes 字符串转为字节
str.encode(str)
换行显示问题:
由于用wxpython做python的UI开发,
换行显示问题的解决方法是:
添加一个style 属性:wx.TE_MULTILINE
否则 self.m_textCtrl3.AppendText(str(self.message, encoding="utf-8"))+“\n”
即使添加了"\n",也无法换行。