python2 中 unicode 和 str 之間的轉換及與python3 str 的區別

這篇文章主要介紹了python2 中 unicode 和 str 之間的轉換及與python3 str 的區別 本文給大家介紹的非常詳細,具有一定的參考借鑑價值,需要的朋友可以參考下
在python2中字符串分爲 unicode 和 str 類型

Str To Unicode 使用decode(), 解碼
Unicode To Str 使用encode(), 編碼

返回數據給前端時需要先將unicode轉換爲str類型, 事實上, python2 中的 str 就是一串字節(byte), 而網絡通信時, 傳輸的就是字節. 如果前端需要接收json數據, 需要使用 json.dumps() 將數據轉換爲json格式進行返回, 當數據是嵌套類型的數據, 內層的數據可能無法直接轉換爲str類型的數據, 這時可以使用eval()函數進行轉換, 再使用json.dumps()進行轉換爲json格式的數據, json 事實上就是一串字符串.

python2 默認情況下 字符串 的類型是 str 類型, 如果需要得到 unicode 類型的字符串, 需要使用下面的方式進行聲明:

my_str = u"lowmanisbusy" # 在變量前面加上 u

在 python2 中如果沒有重新指定字符編碼, 定義中文的字符串時, 需要加上 “u”, 指明該字符串爲 unicode 類型, 指定使用unicode編碼對其進行編碼保存:

my_zh_str = u"渣男不但醜" # 在變量前面加上 u

unicode編碼: unicode編碼爲世界上所有字符都分配了一個唯一編號, 爲十六進制, 如中文簡體漢字 “渣” 的 Unicode編號就是 6E23, 在 python2就是 “\u6e23”, 但是unicode僅僅定義了每個字符的編號,並沒有定義如何將這個編號進行存儲的方式,所以後來出現了utf-8, gbk等編碼格式, 它們都是 unicode 的一種實現方式, 仍然使用了unicode 中的唯一編號, 個人對其的簡單理解就是在unicode編碼的基礎之上又定義了對字符的存儲方式.

在python3中字符串分爲 str 和 bytes 兩種類型

Str To Bytes 使用 encode(), 編碼
Bytes To Str 使用 decode(), 解碼

這裏需要說明的是, python3 中 bytes 類型的字符串, 就相當於 python2 中 str 類型的字符串, python3中沒有unicode類型的字符串, 這裏其實涉及到默認編碼的問題, python3默認字符編碼爲:utf-8, python2默認字符編碼爲:ASCII, ASCII碼 包含了128個字符, 其中包括所有的英文字符, 阿拉伯數字, 標點符號, 控制符號等, 卻沒有中文, 中文是象形文字, 需要使用到更多的字節進行組合來表示出每個漢字, 因此ASCII是無法滿足對中文的表示的, 所以 python2中如果沒有重新設置字符編碼的話,代碼中就不允許出現str類型的中文字符串(可以指定爲unicode類型), 因爲Cpython2解釋器無法識別. 至於 ASCII, UNICODE, UTF-8 之間的關係與區別這裏就不細說了, 可以自行去了解一下( utf-8編碼 是 unicode編碼 的一種實現方式, 個人理解可以認爲是下面這樣一種關係: utf-8 <—> unicode <—>byte, 最終,數據的傳輸仍然是以二進制的形式一個一個字節進行傳輸的)

默認情況下,python3中字符串的類型爲 str, 在web框架中, 會自動將 str轉換成 byte 向前端返回.

當需要將某種編碼格式的bytes轉換另外一種編碼格式的bytes時需要先按原來的編碼格式進行解碼成str類型, 再使用新的編碼格式轉換爲bytes類型

如: 若存在變量 my_bt, 其爲編碼格式 gbk 的 bytes, 需將其轉換爲utf-8的編碼格式,需要進行如下的處理:

my_str = my_bt.decode("gbk") # 解碼
  my_bt = my_str.encode("utf-8") # 重新編碼

因爲 python3 中沒有 unicode 類型的字符串, 所有在 python3 中使用下面這種方式定義字符串是沒有意義的

 my_str = u"渣男不但醜"

ps:下面看下Python2之unicode轉字符串

str.encode('unicode-escape').decode('string_escape')

推薦我們的python學習基地,點擊進入看老程序是如何學習的!從基礎的python腳本、爬蟲、django、數據挖掘等編程技術,工作經驗,還有前輩精心爲學習python的小夥伴整理零基礎到項目實戰的資料,!每天都有程序員定時講解Python技術,分享一些學習的方法和需要留意的小細節

總結
以上所述是小編給大家介紹的python2 中 unicode 和 str 之間的轉換及與python3 str 的區別,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回覆大家的

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章