python基础|字符编码
任何一個程序想要運行,必須先有硬盤加載到內存,然后由cpu去內存取只執行。運行著的應用程序的數據,必須在內存運行。python運行文件的三步,首先把python文件解釋器讀取到內存上,然后應用程序代碼文本文件讀取到內存上,最后python解釋器對程序代碼進行編譯成計算機識別的代碼。
字符編碼
? 字符編碼和文本文件有關。文字,字母,數字符號等都屬于字符。常見的文本文件,記事本,word文件等。但是圖片和視頻不屬于文本文件。
我們寫的文件要想之后還可以查看,文件就要存儲到硬盤中。其過程就是計算機將字符對應字符編碼表翻譯成二進制數存入硬盤。早期計算機使用英文字符,存入硬盤占用1Btes,也就是八位二進制(8Bts),
? 輸入字符? >>>>>>(字符編碼表)>>>>>?? 二進制數
?
后來各個國家也是用計算機,但是使用英文十分不方便。各個國家都繪制自己的編碼表,中國是用GBK編碼表,中文字符占2Btes。日本使用shift-jis編碼表,韓國使用ECU-KR編碼表。
萬國碼unicode
萬國碼unicode出現,它可以兼容各國語言,各國語言都可以識別。unicode編碼統一所有字符都占2Btes。但是這種編碼也有缺點,就是浪費存儲空間,程序運行效率低。在此基礎上出現了優化的utf-8編碼。utf-8編碼會將unicode用文字夫由原來的2Btes變成1Btes,將中文的2Btes變成3Btes存入硬盤中。
對于存入文件的過程可以理解為:
數據保存到硬盤
?? 1, 內存中的unicode格式二進制數據數字 >>>>> (encod) >>>> utf-8
? ? 硬盤中的數據有硬盤讀到內存
?? 1, 硬盤中的utf-8格式的二進制數據?? >>>>解碼(decode) >>>unincode格式的二進制數據
? ? ? 要明白的是用戶輸入分時候,無論輸入什么字符都能夠兼容萬國字符。其他國家的數據有硬盤讀到內存的時候unicode與其他各個國家的編碼都有對應關系。
? 在python2默認使用ASCII碼(因為在開發pyhon2解釋器時uniocode還沒有盛行),而在python3中默認使用的是utf-8。python3字符串默認使用unicode編碼格式的二進制數
?文件頭
在文件中的字符編碼運行之前,要明白的是,文件以什么格式存入硬盤就應該以什么格式讀出來。可以想象這樣一個場景,發密電碼,發送者以一種編碼方式發出,解碼者就必須一相同編碼方式才能解密。如果不是,那么將會得到一堆亂碼。計算機也是如此
# 以gbk格式存入編碼,以utf-8格式解碼 a = '學習' # 數據字符串‘學習’ a1 = a.encode('gbk') # 以gbk格式存入 a2 = a1.decode('utf-8') # 以utf-8格式讀出 print(a2) # 結果是可以讀但是無法解碼,導致亂碼 ?? # 以gbk格式存入,以gbk格式讀出 a = '學習' # 數據字符串‘學習’ a1 = a.encode('gbk') # 以gbk格式存入 a2 = a1.decode('gbk') # 以utf-8格式讀出 print(a2) 學習總結:
在讀取文件的時候,如果亂碼,很大可能就是讀的時候與存入編碼格式不同所致
?? (在文件看到:# coding:utf-8 ,它的意思告訴解釋器用utf-8編碼解碼。)
轉載于:https://www.cnblogs.com/huaiXin/p/11140478.html
《新程序員》:云原生和全面數字化實踐50位技術專家共同創作,文字、視頻、音頻交互閱讀總結
以上是生活随笔為你收集整理的python基础|字符编码的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Redis---持久化
- 下一篇: 奇怪的bug