python 字节与字符串的转换

在写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",也无法换行。

 

你可能感兴趣的:(python,python,字符串)