# 轉載自:https://blog.csdn.net/andyzhaojianhui/article/details/53785656
1、基本概念
(一)“字節”的定義 字節(Byte)是一種計量單位,表示數據量多少,它是計算機信息技術用於計量存儲容量的一種計量單位。 (二)“字符”的定義 字符是指計算機中使用的文字和符號,比如1、2、3、A、B、C、~!·#¥%……—*()——+、等等。 (三)“字節”與“字符” 它們完全不是一個位面的概念,所以兩者之間沒有“區別”這個說法。不同編碼里,字符和字節的對應關系不同: ①ASCII碼中,一個英文字母(不分大小寫)占一個字節的空間,一個中文漢字占兩個字節的空間。一個二進制數字序列,在計算機中作為一個數字單元,一般為8位二進制數,換算為十進制。最小值0,最大值255。 ②UTF-8編碼中,一個英文字符等於一個字節,一個中文(含繁體)等於三個字節。 ③Unicode編碼中,一個英文等於兩個字節,一個中文(含繁體)等於兩個字節。 符號:英文標點占一個字節,中文標點占兩個字節。舉例:英文句號“.”占1個字節的大小,中文句號“。”占2個字節的大小。 ④UTF-16編碼中,一個英文字母字符或一個漢字字符存儲都需要2個字節(Unicode擴展區的一些漢字存儲需要4個字節)。 ⑤UTF-32編碼中,世界上任何字符的存儲都需要4個字節。
2、具體說明
看這篇文章前,你應該已經知道了為什么有編碼,以及編碼的種類情況 ASCII 占1個字節,只支持英文 GB2312 占2個字節,支持6700+漢字 GBK GB2312的升級版,支持21000+漢字 Shift-JIS 日本字符 ks_c_5601-1987 韓國編碼 TIS-620 泰國編碼 由於每個國家都有自己的字符,所以其對應關系也涵蓋了自己國家的字符,但是以上編碼都存在局限性,即:僅涵蓋本國字符,無其他國家字符的對應關系。應運而生出現了萬國碼,他涵蓋了全球所有的文字和二進制的對應關系。 Unicode 2-4字節 已經收錄136690個字符,並還在一直不斷擴張中... Unicode 起到了2個作用: 直接支持全球所有語言,每個國家都可以不用再使用自己之前的舊編碼了,用unicode就可以了。(就跟英語是全球統一語言一樣) unicode包含了跟全球所有國家編碼的映射關系,為什么呢?后面再講 Unicode解決了字符和二進制的對應關系,但是使用unicode表示一個字符,太浪費空間。例如:利用unicode表示“Python”需要12個字節才能表示,比原來ASCII表示增加了1倍。 由於計算機的內存比較大,並且字符串在內容中表示時也不會特別大,所以內容可以使用unicode來處理,但是存儲和網絡傳輸時一般數據都會非常多,那么增加1倍將是無法容忍的!!! 為了解決存儲和網絡傳輸的問題,出現了Unicode Transformation Format,學術名UTF,即:對unicode中的進行轉換,以便於在存儲和網絡傳輸時可以節省空間! UTF-8: 使用1、2、3、4個字節表示所有字符;優先使用1個字符、無法滿足則使增加一個字節,最多4個字節。英文占1個字節、歐洲語系占2個、東亞占3個,其它及特殊字符占4個。
UTF-16: 使用2、4個字節表示所有字符;優先使用2個字節,否則使用4個字節表示。
UTF-32: 使用4個字節表示所有字符。
總結:UTF 是為unicode編碼 設計 的一種 在存儲 和傳輸時節省空間的編碼方案。
3、python中出現錯誤的解決方案
常見編碼錯誤的原因有:
Python解釋器的默認編碼
Python源文件文件編碼
Terminal使用的編碼
操作系統的語言設置 掌握了編碼之前的關系后,挨個排錯就好啦
