ASCII 編碼
ASCII 碼使用指定的 7 位或 8 位二進(jìn)制數(shù)組合來(lái)表示 128 或 256 種可能的字符煮落。標(biāo)準(zhǔn) ASCII 碼也叫基礎(chǔ) ASCII 碼恢氯,使用 7 位二進(jìn)制數(shù)(剩下的 1 位二進(jìn)制為 0)來(lái)表示所有的大寫(xiě)和小寫(xiě)字母,數(shù)字 0 到 9盗温、標(biāo)點(diǎn)符號(hào), 以及在美式英語(yǔ)中使用的特殊控制字符。其中最后一位用于奇偶校驗(yàn)。
ASCII 是單字節(jié)編碼拆座,無(wú)法用來(lái)表示中文(中文編碼至少需要2個(gè)字節(jié)),所以冠息,中國(guó)制定了 GB2312 編碼,用來(lái)把中文編進(jìn)去孕索。但世界上有許多不同的語(yǔ)言逛艰,所以需要一種統(tǒng)一的編碼。
Unicode
Unicode 把所有語(yǔ)言都統(tǒng)一到一套編碼里搞旭,這樣就不會(huì)再有亂碼問(wèn)題了散怖。
Unicode 最常用的是用兩個(gè)字節(jié)表示一個(gè)字符(如果要用到非常偏僻的字符,就需要4個(gè)字節(jié))∫奚現(xiàn)代操作系統(tǒng)和大多數(shù)編程語(yǔ)言都直接支持 Unicode镇眷。
Unicode 和 ASCII 的區(qū)別
ASCII 編碼是 1 個(gè)字節(jié),而 Unicode 編碼通常是 2 個(gè)字節(jié)翎嫡。
字母 A 用 ASCII 編碼是十進(jìn)制的 65欠动,二進(jìn)制的 01000001;而在 Unicode 中惑申,只需要在前面補(bǔ) 0具伍,即為:00000000 01000001。
統(tǒng)一成 Unicode 編碼圈驼,亂碼問(wèn)題從此消失了人芽。但是,如果你寫(xiě)的文本基本上全部是英文的話绩脆,用 Unicode 編碼比 ASCII 編碼需要多一倍的存儲(chǔ)空間萤厅,在存儲(chǔ)和傳輸上就十分不劃算橄抹。
UTF8
所以,本著節(jié)約的精神惕味,又出現(xiàn)了把 Unicode 編碼轉(zhuǎn)化為“可變長(zhǎng)編碼”的 UTF-8 編碼害碾。
UTF-8 編碼把一個(gè) Unicode 字符根據(jù)不同的數(shù)字大小編碼成 1-6 個(gè)字節(jié),常用的英文字母被編碼成 1 個(gè)字節(jié)赦拘,漢字通常是 3 個(gè)字節(jié)慌随,只有很生僻的字符才會(huì)被編碼成 4-6 個(gè)字節(jié)。如果你要傳輸?shù)奈谋景罅坑⑽淖址赏?UTF-8 編碼就能節(jié)省空間阁猜。
字符? ? ? ? ? ? ?ASCII? ? ? ? ? ? ? ? ? ? ?Unicode? ? ? ? ? ? ? ? ? ? ? ? ? ?UTF-8
? A? ? ? ? ? ? ?01000001? ? ? ? 00000000 01000001? ? ? ? ? ? ? ?01000001
中文? ? ? ? ? ? ? ? x? ? ? ? ? ? ? ? ?01001110 00101101? ? ? ? ? 01001110 00101101
從上面的表格還可以發(fā)現(xiàn),UTF-8 編碼有一個(gè)額外的好處蹋艺,就是 ASCII 編碼實(shí)際上可以被看成是 UTF-8 編碼的一部分剃袍,所以,大量只支持 ASCII 編碼的歷史遺留軟件可以在 UTF-8 編碼下繼續(xù)工作捎谨。