編碼格式筆記

ASCII(American Standard Code for Information Interchange,美國信息交換標準代碼)
ANSI(American National Standards Institute 美國國家標準學會)
漢字的Unicode編碼和ANSI編碼,GBK是漢字的ANSI編碼,UTF-8是漢字的Unicode編碼html

ASCII歷史
標準ASCII碼由一個字節,也就是八位的二進制數表示字符,八位二進制數最多能表示256種不一樣字符;
最初只使用了前128個碼值,也就是前七位,最高位用做校驗符
0x00 ~ 0x1f 前32個碼錶示控制碼,好比換行、ESC等
0x20 ~ 0x3f 表示空格(碼值32)、運算符、數字(碼值48)等
0x40 ~ 0x5f 表示@(碼值64)、大寫字母(A的碼值是65)等
0x60 ~ 0x7f 表示小寫字母(a碼值97,與A相差32)、DEL(碼值127,最後一位)算法

擴展ASCII碼後面128 ~ 255被其餘國家或組織用來表示新的字符,稱爲擴展字符集
擴展字符集例子
IBM字符集,它把值爲128-255之間的字符用於畫圖和畫線,以及一些特殊的歐洲字符
ISO 8859-1Latin 1(簡稱爲ISO Latin-1),它把位於128-255之間的字符用於拉丁字母表中特殊語言字符的編碼windows


GB2312 中國對ASCII編碼的擴展
一個小於127的字符的意義與原來相同,但兩個大於127的字符連在一塊兒時,就表示一個漢字,前面的一個字節(稱之爲高字節)從0xA1到 0xF7,後面一個字節(低字節)從0xA1到0xFE;
大於128的編碼做爲一個Leading Byte,緊跟在Leading Byte後的第二(甚至第三)個字符與Leading Byte一塊兒做爲實際的編碼
對於漢字的ANSI編碼而言,無所謂MSB, LSB。它就是把第一個字節理解爲Leading Byte,第二個字節理解爲另外的編碼,因此它們在內存裏的存放次序不能倒過來,不然就理解不對了。
GB2312保留了128個ASCII編碼,並在擴展編碼中對其進行了從新編碼,ASCII碼稱爲半角字符,GB2312對ASCII的從新編碼稱爲全角字符;數組

GBK 因爲GB2312的編碼容量太小,因而從新設計的編碼
再也不要求低字節必定是127號以後的內碼,只要第一個字節是大於127就固定表示這是一個漢字的開始,無論後面跟的是否是 擴展字符集裏的內容
GBK包含GB2312的全部內容網絡

GB18030在GBK的基礎上加入少數民族語言字符編碼

ISO(國際標準化組織)spa

UNICODE(Universal Multiple-Octet Coded Character Set,簡稱UCS)
統一用兩個字節來表示全部字符,能夠表示65535種字符(對最新的標準這種說法是錯誤的
它經過增長一個高字節對ISO Latin-1字符集進行擴展,當這些高字節位爲0時,低字節就是ISO Latin-1字符。
對8位的ASCII碼擴展爲16位,高8位爲0,保存英文時相比ASCII碼存儲空間增長一倍
ASCII碼不兼容其餘國家的編碼,ASCII碼與GBK沒有一種簡單的算數方法能夠對其轉換,只有查表設計

UTF(UCS Transfer Format)
如何在網絡上傳輸也是一個必須考慮的問題,因而面向傳輸的衆多 UTF(UCS Transfer Format)標準出現了,顧名思義,UTF8 就是每次8個位傳輸數據,而 UTF16 就是每次16個位,只不過爲了傳輸時的可靠性,從UNICODE到 UTF時並非直接的對應,而是要過一些算法和規則來轉換。
UTF(Universal Transformation Format)
蒙B,究竟是傳輸,仍是轉換code

UTF-8 是Unicode的一種變長字符編碼,
UTF-8最大的一個特色,就是它是一種變長的編碼方式。它能夠使用1~4個字節表示一個符號,根據不一樣的符號而變化字節長度,當字符在ASCII
碼的範圍時,就用一個字節表示,保留了ASCII字符一個字節的編碼作爲它的一部分,注意的是unicode一箇中文字符佔2個字節,而UTF-8一箇中
文字符佔3個字節)。從unicode到uft-8並非直接的對應,而是要過一些算法和規則來轉換。orm

如何識別變長字符編碼,使用特定的標記碼

Unicode轉UTF-8
UTF-8是這樣作的:
1. 單字節的字符,字節的第一位設爲0,對於英語文本,UTF-8碼只佔用一個字節,和ASCII碼徹底相同;
2. n個字節的字符(n>1),第一個字節的前n位設爲1,第n+1位設爲0,後面字節的前兩位都設爲10,這n個字節的其他空位填充該字符unicode碼,高位用0補足。


GB2312與Unicode編碼衝突,BOM
windows記事本」不能單獨保存「聯通」:
GB編碼的「聯通內碼包含Unicode編碼的標記碼,Unicode編碼第一個字節前三位是110,第二個字節前兩位是10,「聯通」的GB編碼正好符合。使用記事本單獨保存「聯通」,默認是以ANSI格式保存(此處有個疑問,爲何不是保存爲GB編碼格式,記事本也沒有提供GB格式的選項,中文的ANSI格式是否就是指GB格式)
在簡體中文windows系統中ANSI表示GBK
BOM是windows自動的編輯軟件在保存UTF-8文件時自動在文件頭部加上的隱藏字符標記
windows記事本打開文件的編碼格式是如何肯定的,上面的「聯通」的例子中,保存爲ANSI編碼後打開,
沒有BOM頭,爲何記事本還以UTF-8格式打開

帶BOM頭的PHP文件顯示的時候頂部不能貼合,有隱藏文字     

-------------------------------------------------------------------------

字符在顯示屏上以圖形的形式存在,在內存和磁盤中以字節數組的形式存在,這二者之間是如何轉換的呢?

字符集:字符圖形的集合,列出了咱們想要在計算機屏幕上顯示的圖形和不顯示的控制字符

編碼表:將字符集中的字符或圖形與一個惟一的數字(碼值、碼點)對應,造成一張表

編碼(格式):將某個字符集的編碼表中的碼值按某種方式轉化成磁盤或內存中的字節數據

解碼(格式):編碼的逆向操做

https://www.cnblogs.com/developerY/p/3575271.html

相關文章
相關標籤/搜索