字符集
1厅克、unicode字符集
(不是編碼,只是一個對某個值的二進制定義)
unicode字符集
0000-ffff 0號平面
10000-1ffff
20000-2ffff
30000-3ffff
40000-4ffff, d0000-dffff
e0000-effff
f0000-fffff
100000-10ffff
utf8編碼規(guī)則
0xxxxxxx
110xxxxx 10xxxxxx
1110xxxx 10xxxxxx 10xxxxxx
11110xxx 10xxxxxx 10xxxxxx 10xxxxxx
111110xx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx
1111110x 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx
7或8個字節(jié)無法達到
5或6個字節(jié)的UTF-8十六進制編碼一定是以f8,f9,fa,fb,fc,fd開頭
4個字節(jié)的UTF-8十六進制編碼一定是以F開頭的
3個字節(jié)的UTF-8十六進制編碼一定是以E開頭的
2個字節(jié)的UTF-8十六進制編碼一定是以C或D開頭的
1個字節(jié)的UTF-8十六進制編碼一定是以比8小的數字開頭的
字符集 和 字符編碼
字符集是一個容納了很多值的“字符-字節(jié)表示”對照表
字符編碼是對字符集里面的每一個字符進行編碼的一種方式
utf8 是對unicode字符集進行編碼的一種編碼方式捐腿。
utf8編碼方式缕减, 是1個字節(jié)笼痛, 2個字節(jié)士八, 3個字節(jié)容燕, 4個字節(jié) 的一種不定長編碼規(guī)則。
預先規(guī)定對應bit位婚度, 剩余bit位蘸秘,用unicode字符集的二進制原始編碼址進行由低到高的填充。 最終得到一個新的二進制值蝗茁。
2醋虏、其它字符集
ascii字符集: 0~127 26個基本拉丁字母, 阿拉伯數字哮翘, 英式標點符號
eascii字符集:擴充字符颈嚼, 128~255
gb2312 簡體中文編碼表: 6763個漢字
gb18030:當前最新的中文編碼表,對原來的漢子編碼字符集的擴充饭寺,與gb2312-1980兼容阻课, 與gbk兼容,共收錄漢字70244個佩研。最多可以定義161萬個字符柑肴, 支持少數名字的文字霞揉, 包括繁體漢字旬薯, 日韓漢字 多字節(jié)編碼
big5字符集: 收錄13060個漢字, 主要有繁體中文漢字 雙字節(jié)編碼
unicode字符集: 收錄10萬以上個字符适秩。
字符編碼
ascii編碼绊序、非ascii編碼
gbk編碼
utf8編碼
utf16編碼
utf32編碼
gb18030編碼
ucs-2編碼
ucs-4編碼
big5編碼
gb2312編碼
二進制硕舆, 1個字節(jié),8個bit位骤公, 1個bit位2中狀態(tài)抚官, 1個字節(jié)對應256中狀態(tài)。 因此可以表示256種值阶捆。
ascii
1個字節(jié)凌节,第一個bit位統(tǒng)一規(guī)定為0,還剩7個bit位洒试,表示128中狀態(tài)倍奢,表示128個值。這就是ascii編碼垒棋。
非ascii
如果第一個bit位拿來使用卒煞,有256種值,0~127表示的值相同叼架, 128~255表示的符號不相同畔裕。
gb2312
2個字節(jié)表示一個值, 256*256=65536個不同的值乖订。
編碼扮饶,解碼, 解碼時垢粮,必須知道二進制的編碼方式贴届,不然會亂碼。
unicode是所有符號的編碼蜡吧, 每一個符號毫蚓,都有唯一不同的表示,這樣就不存在不同的二進制值表示不同的值昔善。
unicode可能使用1個字節(jié)元潘,2個字節(jié),3個字節(jié)君仆,4個字節(jié)表示一個值翩概, 比如用3個字節(jié)表示一個值的時候, 計算機怎么知道返咱,這是一個unicode表示的1個值钥庇,而不是3個ascii值呢?
如果unicode統(tǒng)一使用3個字節(jié)或4個字節(jié)來表示一個值咖摹, 這樣雖然不存在是一個值還是多個值的問題评姨, 但是卻造成空間浪費。
unicode是一個字符集萤晴,沒有規(guī)定如何編碼解碼的吐句,只是人為的對每一個值定一個字節(jié)(1個字節(jié)胁后,2個字節(jié),3個字節(jié)嗦枢,4個字節(jié))的表示攀芯。
utf8 是unicode字符集的一種編碼方式的實現。1~4個字節(jié)表示一個值文虏, unicode單字節(jié)符號侣诺,字節(jié)第一位設置為0,后面7位為這個符號的unicode碼氧秘, 0~127個值紧武。這些字符集值, 就和ascii編碼相同了敏储。
0xxxxxxx
110xxxxx 10xxxxxx
1110xxxx 10xxxxxx 10xxxxxx
11110xxx 10xxxxxx 10xxxxxx 10xxxxxx
這樣做的好處看到了吧阻星, 如果隨便刪除一個字節(jié), 都不會影響其它字符集的解碼已添。
如果第一個bit位是0妥箕,這個字節(jié)就是一個字符,如果第一個bit位是1更舞,則連續(xù)有多少個1畦幢,表示當前字符值占用多少個字節(jié)
FEFF
大頭:高bit位存在前面FFFE
小頭:高bit位存放在后面FFFE
ansi, 表示gb2312編碼 D1CF
以unicode字符值二進制 “4E25” 為例缆蝉, utf編碼表示為 "E4 B8 A5"
unicode, "FF FE 25 4E" 小頭方式存儲的什么編碼
unicode big endian "FE FF 4E 25" 大頭方式存儲
utf8 "EF BB BF E4 B8 A5"存儲順序與實際的編碼順序一致
http響應頭內容協(xié)商
編碼宇葱, 解碼, 編碼規(guī)則刊头, 解碼規(guī)則 黍瞧, 字符集
accept-charset 字符集, 通常包含了編碼方案原杂, gb2312印颤, utf-8
accept-encoding 編碼方法, 是否支持壓縮穿肄, 什么壓縮方法
accept-language,語言年局, 中文是語言,中文的字符集有big5, gb2312, gbk, gb18030
content-type, 響應的對象類型咸产, 字符集矢否, text/html; charset='gb2312'
content-encoding, 響應的對象用了什么壓縮方法
content-language,響應的對象的語言
參考: http://www.cnblogs.com/skynet/archive/2011/05/03/2035105.html