咱們在寫代碼的時候常常會遇到亂碼等問題,其實就是由於編碼格式不正確,那咱們如今來簡單看一下關於編碼的相關知識python
計算機存儲數據是用0、1存儲的,爲了存儲英文字符等,因此出現了一個ASCII編碼表,經過這個表就是把對應的英文轉換對應爲相應的0、1數據存儲到計算機,可是英文只有26個字母,中文有6萬多漢字,ASCII編碼不夠,因此根據須要就出現了unicode、utf-8等編碼,實際能夠理解爲它們把全球的文字編碼對應到計算機的0、1來存儲識別。數組
ASCII 碼使用指定的 7 位或 8 位二進制數組合來表示 128 或 256 種可能的字符。標準 ASCII 碼也叫基礎ASCII碼,使用 7 位二進制數來表示全部的大寫和小寫字母,數字 0 到 九、標點符號, 以及在美式英語中使用的特殊控制字符。其中:編碼
0~31及127(共33個)是控制字符或通訊專用字符(其他爲可顯示字符),如控制符:LF(換行)、CR(回車)、FF(換頁)、DEL(刪除)、BS(退格)、BEL(振鈴)等。通訊專用字符:SOH(文頭)、EOT(文尾)、ACK(確認)等;code
ASCII值爲 八、九、10 和 13 分別轉換爲退格、製表、換行和回車字符。它們並無特定的圖形顯示,但會依不一樣的應用程序,而對文本顯示有不一樣的影響。orm
32~126(共95個)是字符(32sp是空格),其中48~57爲0到9十個阿拉伯數字;htm
65~90爲26個大寫英文字母,97~122號爲26個小寫英文字母,其他爲一些標點符號、運算符號等blog
Unicode是爲了解決傳統的字符編碼的侷限而產生的。對世界上大部分的文字系統進行了編碼、整理,使電腦能夠更方便的處理和展現文字。Unicode採用16位編碼空間,每一個字符佔2個字節。Unicode的實現方式稱爲Unicode轉換格式utf-8
Unicode碼擴展自ASCII字元集。在嚴格的ASCII中,每一個字元用7位元表示,或者電腦上廣泛使用的每字元有8位元寬。而Unicode使用全16位元字元集。這使得Unicode可以表示世界上全部的書寫語言中可能用於電腦通信的字元、象形文字和其餘符號。unicode
不一樣的編碼方式會形成亂碼問題,Unicode將世界上全部符號都歸入其中。每個符號都給予一個編碼,這樣就就解決了亂碼問題。Unicode如今的規模能夠容納100多萬個符號,每一個符號的編碼都不同,例如U+4E0A表示上,U+4E0B表示下,具體的符號對應表能夠查看:http://www.chi2ko.com/tool/CJK.htmget
UTF全稱(Unicode Transformation Format),因此它是一種針對前面提到的Unicode的編碼格式,常見的格式就是 UTF-8,還有 UTF-16, UTF-32。
UTF-8 其中的 8 表示的是 8 bit,即Unicode中每8位表示一個字符,UTF-16 和 UTF-32 相似,由於Unicode最多才21位,32位大於21位,因此 UTF-32 的格式就能夠表示全部字符對應的Unicode碼了,可是呢,32位也就是4字節,讓每一個字符都佔用4字節太費空間了,因此出現了UTF-8和UTF-16。
UTF-8 編碼規則以下:
Unicode | bit | UTF-8 | byte |
---|---|---|---|
0x0000 - 0x007f | 0 - 7 | 0XXX XXXX | 1 |
0x0080 - 0x07ff | 8 - 11 | 110X XXXX 10XX XXXX | 2 |
0x0800 - 0xffff | 12 - 16 | 1110 XXXX 10XX XXXX 10XX XXXX | 3 |
0x1 0000 - 0x1f ffff | 17 - 21 | 1111 0XXX 10XX XXXX 10XX XXXX 10XX XXXX | 4 |
Python中默認的編碼格式是 ASCII 格式,在沒修改編碼格式時沒法正確打印漢字,因此在讀取中文時會報錯。解決方法爲在文件的開頭加入 # -*- coding: UTF-8 -*-
或者#coding=utf-8
就好了。
咱們要記住寫python程序的時候通常使用utf-8編碼格式來存儲編碼格式,網頁裏面一樣的也聲明utf-8便可,utf-8是中文、英文、日文等全球文字均可以使用的編碼格式,通用性很強。
在Pycharm 中設置編碼格式的步驟:File --> setting --> File Encodings