python unicode 問題 decode encode
這個問題,是很多人的困擾。我們知道所有的文字在電腦中都有編碥。當我們按下鍵盤的 a 這個字母時,電腦作業系統本身並不是收到一個 a 字母,而是一個號碼 97,再從97 查出是a這個字母。這就是編碼。為什麼需要這樣做,因為文字就是一個圖。如果由鍵盤送出的訊號 是以圖為單位來傳送,那傳輸的硬體就要多設計頻寬。鍵盤本身也要存放這些文字的圖。要這樣設計硬體也不是不可以,但這個設計就不是很聰明。 早期電腦的編碼是為了對應鍵盤上的鍵,產生了 ascii 碼。一個由8bit編碼的對應系統。可想而知。8bit也就只能對應256個文字。那全世界其它語言怎麼辨呢?當然就開始出現其它編碼。下面是一些常見的碼 gbk 這個編碼包含了 繁簡中文,日文 windows 中的 cp950 繁中 cp932 日文 cp1250 中歐語言 cjk 中日韓 big5 繁中 Shift_JIS 日文 當一個系統慢慢的出現在各個國家的時候,上面這些編碼就各自出現了。 隨著編碼越來越多,人們就會問,有那麼多編碼,為什麼不建一個完整的,把所有編碼都包進來的統一編碼呢?是的,unicode就是這樣的產物。 進入我們今天的主題。 unicode 國際組織制定的,包括全世界所有語言文字與符號。 針對unicode又產生utf8,utf16,utf32的編碼。 這裡很重要。utf8,utf16,utf32是針對unicode ,如果拿gbk要改為utf8那是行不通的。必需要gbk先轉成unicode,再由unicode轉為utf8或是utf16,或是utf32。 所以為什麼我們在寫python開頭要加這一行 # -*- coding: utf-8 -*- 就是讓python知道,他接下來要處理的程式中有 unicode 的非英語系文字。編碼要用utf8。 為什麼我們還是常常在python(2.7)遇到中文問題,尤其是換作業系統的時候? 我們先試一下 >>>a="我是人" >>>len(a) 9 >>>type(a) <type 'str'> >>>a= u "我是人" >>>len(a)