前言:
今天notepad++檢視測試傳過來的乙個log,開啟後竟然有部分亂碼, 無法檢視完整資訊,嘗試更改編碼後仍未能解決, 同事告知使用瀏覽器開啟或許可以,於是搗鼓一下,使用瀏覽器開啟並選擇編碼unicode(utf-8) 後終於正常顯示,順利解決問題。亂碼顯示的問題以前也經常遇到,從未認真對待過,剛好稱此機會搞清楚。
「編碼」與「解碼」不一致。
我們知道,計算機中儲存的資訊是用二進位制數0、1表示的,而通過螢幕看到的英文、中文等字元是儲存的二進位制數轉換之後的結果。也就是說:計算機依據什麼規則儲存字元,比如『z』 用0、1如何表示儲存,稱之為「編碼」,反過來,計算機中儲存的二進位制數如何依據什麼規則解析顯示出來,稱之為「解碼」。如果編碼、解碼的使用不匹配的規則,則可能導致』z』 顯示為其它字元或者無法正確顯示,產生亂碼。
字元是各種文字和符號的總稱,包括各國家文字、標點符號、圖形符號、數字等,
而字符集則是多個字元的集合,字符集種類較多,每個字符集包含的字元個數不同,常見字符集名稱:ascii字符集、gb2312字符集、big5字符集、unicode字符集等。
字元編碼是一套法則,是將自然語言的字元集合與數字系統之間建立對應關係的乙個規則,
每個字元需要乙個編碼來表示,然而每個字元究竟使用哪個編碼代表,則要取決於何種編碼規則,於是針對ascii字符集、unicode字符集等不同字元產生了不同編碼規則。
ascii字符集與編碼
ascii字符集主要包括:可顯示字元(英文大小寫字元、阿拉伯數字和西文符號)和控制字元(回車鍵、退格、換行鍵等)。
ascii字符集使用7位(bits)表示乙個字元,共128字元,字元值從0到127,其中32到126是可列印字元,詳細檢視ascii表。
ascii擴充套件字符集:使用8位(bits)表示乙個字元,共256字元,它是從ascii字符集擴充出來的,擴充後的符號增加了**符號、計算符號、希臘字母和特殊的拉丁符號。
gb2312字符集與編碼
ascii字符集和擴充套件集最多表示256個字元,並且顯示字元為英文,隨著計算機逐漸發展到中國,為了顯示中文,必須設計一套編碼規則用於將漢字轉換為計算機可以接受的數字系統的規則,於是《中國國家標準簡體中文字符集》產生了。漢字眾多, 因此編碼字元較多,詳細可google檢視規則。
unicode 字符集與編碼
隨著計算機和網際網路發展,各地資訊交流頻繁,如果各地採用自己的編碼方案,一旦通過網路傳播,另一端由於不相容,極大可能出現亂碼現象,幾乎不能正常交流。於是產生了統一編碼unicode的設想。
unicode編碼系統為表達任意語言的任意字元而設計,使用4byte的數字來表達每個字母、符號,或者表意文字,每個數字代表唯一的至少在某種語言中使用的符號。unicode 基於通用字符集(universal character set)的標準來發展,目前仍在不斷擴增, 每個新版本插入更多新的字元。由於unicode 複雜性,實際的編碼方案中,存在utf-32/ utf-16/ utf-8等編碼規則。
3.1 utf-32
上述介紹使用4byte的數字來表達每個字母、符號,或者表意文字,每個數字代表唯一的至少在某種語言中使用的符號的編碼方案,稱為utf-32。
utf-32(也稱ucs-4)是一種將unicode字元編碼的協定,對每個字元都使用4位元組。就空間而言,是非常沒有效率的。
這種方法有其優點,最重要的一點就是可以在常數時間內定位字串裡的第n個字元,因為第n個字元從第4×nth個位元組開始。雖然每乙個碼位使用固定長定的位元組看似方便,它並不如其它unicode編碼使用得廣泛。
3.2 utf-8
utf-8(8-bit unicode transformation format)是一種針對unicode的可變長度字元編碼,又稱萬國碼。它可以用來表示unicode標準中的任何字元,且其編碼中的第乙個位元組仍與ascii相容,這使得原來處理ascii字元的軟體無須或只須做少部份修改,即可繼續使用。因此,逐漸成為電子郵件、網頁及其他儲存或傳送文字的應用中,優先採用的編碼。網際網路工程工作小組(ietf)要求所有網際網路協議都必須支援utf-8編碼。
字符集與編碼
這些東西是自己在知乎上看的,摘抄下來,以便以後查閱,主要內容有 字符集與編碼 byte order mark等。在windows中經常需要用到多字元與寬字元的轉換方法,多字元 multichar 也就是ansi編碼的方式,而寬字元 widechar 也就是unicode編碼的方式。ansi是預設的編...
字符集與編碼
乙個位元 bit 可以是0,或者是1,8個位元 bit 組成乙個位元組 byte 全為0時代表數字0,全為1時代表數字255。乙個位元組可以表示256個數字,兩個位元組可以表示65536個數字。更多的位元組,可以有更多的組合,就可以表示更大的數值範圍。整數可以這麼存,那字元呢?一堆二進位制的0和1,...
字符集與字元編碼
字符集 字符集是各種文字和符號的總稱,也就是多個字元的集合,而常見的字符集有 ascii字符集 iso 8859字符集 gb 2312字符集 big 5字符集 gbi 8030字符集 unicode字符集等。計算機要能夠識別和儲存各種字元,就要對各種字符集進行字元編碼。字元編碼 編碼和字符集不同,字...