網站首頁 編程語言 正文
背景
在工作中經常會碰到字節串(bytes)與字符串(string)之間轉換的問題,做個記錄。
bytes只負責用字節序列的形式(二進制形式)存儲數據,不關心數據本身是圖片、文字、視頻等等。如果需要使用并且展示的話,按照對應的解析規則處理,就可以拿到對應類型的數據。如常見的字符串類型,只需要使用對應的字符編碼格式,就可以拿到字符串的內容。
下面會用一些代碼來表示bytes的構造,以及和字符串之間的轉換。
代碼
先看一下代碼。
#!/user/bin/env python # coding=utf-8 """ @project : csdn @author : huyi @file : byte_to_string.py @ide : PyCharm @time : 2021-12-23 11:47:45 """ # 不指定字符集 b1 = b'I love u , baby' print('b1', b1) print(b1[:-3]) # 指定字符集 b2 = bytes('今天天氣真好/哈哈', encoding='UTF-8') print('b2', b2) # 字符串轉為bytes str1 = '元宇宙會導致人類文明的停滯嗎?' b3 = str1.encode('UTF-8') print('b3', b3) # bytes轉為字符串方法1 str2 = str(b3, 'UTF-8') print('str2', str2) # bytes轉為字符串方法1 str3 = b3.decode('UTF-8') print('str3', str3)
代碼說明:
1、可以使用字符串前面加小寫字母b的方式定義bytes,但是不建議,建議使用b2的定義方式,可以調整字符編碼。
2、字符串類型的數據可以通過encode方法,將字符串按照字符編碼轉為bytes。
3、bytes也可以通過str的構造指定字符編碼或者decode方法,將bytes轉為字符串。
驗證一下
PyDev console: starting. Python 3.6.13 |Anaconda, Inc.| (default, Mar 16 2021, 11:37:27) [MSC v.1916 64 bit (AMD64)] on win32 runfile('D:/spyder/csdn/tool/byte_to_string.py', wdir='D:/spyder/csdn/tool') b1 b'I love u , baby' b'I love u , b' b2 b'\xe4\xbb\x8a\xe5\xa4\xa9\xe5\xa4\xa9\xe6\xb0\x94\xe7\x9c\x9f\xe5\xa5\xbd/\xe5\x93\x88\xe5\x93\x88' b3 b'\xe5\x85\x83\xe5\xae\x87\xe5\xae\x99\xe4\xbc\x9a\xe5\xaf\xbc\xe8\x87\xb4\xe4\xba\xba\xe7\xb1\xbb\xe6\x96\x87\xe6\x98\x8e\xe7\x9a\x84\xe5\x81\x9c\xe6\xbb\x9e\xe5\x90\x97\xef\xbc\x9f' str2 元宇宙會導致人類文明的停滯嗎? str3 元宇宙會導致人類文明的停滯嗎?
附:bytes和string區別
1.python?bytes 也稱字節序列,并非字符。取值范圍 0 <= bytes <= 255,輸出的時候最前面會有字符b修飾;string 是python中字符串類型;
2.bytes主要是給在計算機看的,string主要是給人看的;
3.string經過編碼encode,轉化成二進制對象,給計算機識別;bytes經過解碼decode,轉化成string,讓我們看,但是注意反編碼的編碼規則是有范圍,\xc8就不是utf8識別的范圍;
if __name__ == "__main__": # 字節對象b b = b"shuopython.com" # 字符串對象s s = "shuopython.com" print(b) print(type(b)) print(s) print(type(s))
輸出結果:
b'shuopython.com'
<class 'bytes'>
shuopython.com
<class 'str'>
總結
原文鏈接:https://blog.csdn.net/zhiweihongyan1/article/details/122105183
相關推薦
- 2022-04-15 C語言?指針數組進階詳解_C 語言
- 2022-11-13 git如何還原到某次commit并強制推送遠程_相關技巧
- 2022-10-04 python?Dataframe?合并與去重詳情_python
- 2022-07-24 Python寫安全小工具之TCP全連接端口掃描器_python
- 2023-01-08 react?頁面加載完成后自動執行標簽的點擊事件的兩種操作方法_React
- 2022-07-30 RocketMQ消息過濾是如何實現的?
- 2022-07-17 C語言超詳細講解指針的使用_C 語言
- 2022-09-21 Python?Ast抽象語法樹的介紹及應用詳解_python
- 最近更新
-
- window11 系統安裝 yarn
- 超詳細win安裝深度學習環境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優雅實現加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發現-Nac
- Spring Security之基于HttpR
- Redis 底層數據結構-簡單動態字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支