一篇文章助你理解Python2中字串編碼問題
前幾天給大家介紹了unicode編碼和utf-8編碼的理論知識沒來得及上車的小夥伴們可以戳這篇文章淺談unicode編碼和utf-8編碼的關係。下面在Python2環境中進行程式碼演示分別Windows和Linux作業系統下進行演示以加深對字串編碼的理解。
1、首先在Windows作業系統下的Python2環境中進行演示我們都知道Python2中的編碼問題經常出現需要通過編碼encode和解碼decode進行實現。通過cmd進入命令列視窗然後輸入兩個字串’abc’和u’abc’如下圖所示。需要注意的是這兩個字串的編碼格式是不一樣的前者是string後者是unicode。接下來對其進行編碼指定編碼為utf-8可以發現兩個都正常顯示沒有報錯。
當字串變為中文的時候爾後對其再次進行編碼演示的時候如下圖所示可以看到前者有報錯產生而後者沒有報錯。這個報錯在Python2中經常出現所以需要特別注意Python字串在記憶體中它是通過unicode來進行編碼的。此時定義的str1它傳遞過來的是utf-8編碼非unicode編碼使用encode()函式的前提是待轉換的字串編碼為unicode編碼。所以可以看到str1會報錯而str2並沒有報錯。在Windows下字串的編碼格式是GB2312編碼在Linux下字串的編碼格式是utf-8編碼。如果想要將str1順利的轉換為utf-8編碼的話則需要先將str1進行解碼成unicode編碼再進行編碼即可此時得到的結果同str2轉換的結果是一致的。
2、現在在Linux作業系統下的Python2環境中進行演示使用一樣的字串結果最後是一樣的但是過程有些不同如下圖所示。
在Windows下字串的編碼格式是GB2312編碼在Linux下字串的編碼格式是utf-8編碼。所以當輸入有中文的字串的時候直接編碼為utf-8會報錯通過gb2312編碼進行解碼也會報錯。只要通過utf-8編碼進行解碼然後再通過utf-8進行編碼才可以正確的輸出結果。
有個地方大家可能會覺得很奇怪就是一開始str1.encode(‘utf-8’)表面上看上去str1已經是unicode編碼了之後進行編碼按說沒有什麼問題可是為什麼還是會報錯呢其實主要原因還是在於str1並不是真正的解碼成了unicode格式。其實str1.encode(‘utf-8’)它預設的會進行一步解碼但是其decode()的過程呼叫的是預設的編碼格式而這個預設的編碼格式卻是ASCII編碼如下圖所示。
當中文字串使用ASCII編碼進行解碼之後本身就報錯了後邊的encode(‘utf-8’)根本就沒有執行到。
關於Python2中字串編碼的問題就先介紹到這裡了相信大家應該有了一個初步的認識了下一篇文章將介紹Python3中字串編碼的問題。
相關文章
- 一篇文章助你理解Python3中字串編碼問題Python字串編碼
- 深入分析 Java 中的中文編碼問題 (文章來自網路)Java
- 編譯原理入門篇|一篇文章理解編譯全過程編譯原理
- 一篇文章完全理解virtualenv
- 面對複雜問題時,系統思考助你理解問題本質
- JAVA編碼問題的一些理解(轉)Java
- 一篇文章理解Web快取Web快取
- Ubuntu中 MySQL 的中文編碼問題UbuntuMySql
- JS、C#中URL編碼解碼問題JSC#
- 字串編輯距離問題詳解字串
- 資訊系統中的編碼問題
- springweb開發中編碼亂碼問題解析SpringWeb
- php編碼問題PHP
- 字元編碼問題字元
- 字串-編碼字串
- 字串編碼字串編碼
- 一篇文章帶你搞定經典面試題之扔雞蛋問題面試題
- 一篇文章,從原始碼深入詳解ThreadLocal記憶體洩漏問題原始碼thread記憶體
- 深入分析 Java 中的中文編碼問題Java
- Java 中的中文編碼問題深入分析Java
- 關於Tungsten Fabic版本問題,這一篇文章說清了
- C++中的字串編碼處理C++字串編碼
- PHP中的字串、編碼、UTF-8PHP字串
- 字串-字元編碼字串字元
- JS字串編碼JS字串編碼
- 深入分析 Java Web 中的中文編碼問題JavaWeb
- 字串問題字串
- 理解線段樹這一篇文章就夠啦!
- Activity、View、Window的理解一篇文章就夠了View
- 在網上看到的一篇文章關於js和php編碼的JSPHP
- 一篇搞定面試中的跨域問題面試跨域
- MySQL 中字元編碼問題MySql字元
- 字元編碼問題記錄字元
- python 中文編碼問題Python
- 轉python編碼問題Python
- jsp的編碼問題JS
- jdom解析中文編碼問題
- JAVA的中文編碼問題Java