python 位元組與字串的轉換

2021-08-22 11:46:44 字數 2021 閱讀 5873

在寫python 串列埠程式時,想在視窗的文字框區域將串列埠每次接收到的資料能夠換行顯示,碰到兩個問題:

1. 位元組與字串的轉換;

2. 由於用wxpython做python的ui開發文字框區域的換行顯示;

先系統學習一下位元組與字串的轉換的知識:

例項當中涉及到的**:

self.message_data = ''

self.message=self.ser.serser.readline()

雖然在文字框裡看不出有什麼位元組與字串的區別,但是 用

print(self.message) 列印顯示  就會是  b『***』這種格式
先看兩種將位元組轉為字串的方法:

# bytes to str  位元組轉字串

str(bytes, encoding="utf-8")

# bytes to str 位元組轉為字串

bytes.decode(bytes)

所以以上**可以這樣改:

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')

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

即使新增了"\n",也無法換行。

多位元組字串與寬字串的轉換

多位元組字串與寬字串的轉換可使用c api者win32 api.c api mbstowcs,wcstombs win32 api multibytetowidechar,widechartomultibyte 下面著重介紹win32 api的用法,c api的用法較為簡單可參照win32 api。...

多位元組字串與寬字串的轉換

多位元組字串與寬字串的轉換 多位元組字串與寬字串的轉換可使用c api者win32 api.c api mbstowcs,wcstombs win32 api multibytetowidechar,widechartomultibyte 下面著重介紹win32 api的用法,c api的用法較為簡...

多位元組字串與寬字串的轉換

多位元組字串與寬字串的轉換可使用c api者win32 api.c api mbstowcs,wcstombs win32 api multibytetowidechar,widechartomultibyte 下面著重介紹win32 api的用法,c api的用法較為簡單可參照win32 api。...