常見字符集和編碼方式

2021-08-10 23:56:34 字數 2436 閱讀 9219

asciiunicodegbkgbk2312utf-8這些字符集和編碼方式的名詞總是讓我們糾結,那麼他們有什麼區別呢?

一般來講,除了utf-8是字符集unicode的編碼方式,其餘的例如asciigbk等都屬於字符集,它們為每乙個字符集的字元都賦予了乙個值,這個值可以是乙個位元組大小

,也可能是兩個位元組、三個位元組等;

unicode字符集和utf8編碼有很強的聯絡;具體聯絡是這樣的:

單位元組的字元,位元組的第一位設為0,對於英語文字,utf-8碼只占用乙個位元組,和ascii碼完全相同;

n個位元組的字元(n>1),第乙個位元組的前n位設為1,第n+1位設為0,後面位元組的前兩位都設為10,

這n個位元組的其餘空位填充該字元unicode碼,高位用0補足

這樣就形成了如下的utf-8標記位:

unicode(16進製制)

utf8(2進製)

0x0000 - 0x007f

0******x

0x0080 - 0x07ff

110***xx 10******

0x0800 - 0xffff

1110***x 10****** 10******

0x010000 - 0x10ffff

11110*** 10****** 10****** 10******

…………

unicode中大部分漢字是採用2位元組表示的,因此utf8編碼後大小是3位元組;

但是有些少數不常見的漢字是採用3位元組表示的,因此utf8編碼後大小是4位元組;

例子:

public

static string bytearray2binarystring(byte bytes)

return sb.tostring();

}

漢字:��

system.out.println("unicode: " +  long.tobinarystring((long)"��".codepointat(0)));

system.out.println("utf8: " + bytearray2binarystring("��".getbytes("utf8")));

輸出如下:

unicode: 100000000010111111

utf8: 11110000

10100000

10000010

10111111

��的unicode值是100000**000010**111111一共18位,因此是3位元組字元;對應的utf8編碼是4位元組,因此格式為:11110*** 10****** 10****** 10******;

unicode補全成對應的utf8編碼後是:

11110**000** 10**100000** 10**000010** 10**111111**

對於常見的漢字,一般來講gbk編碼比utf8編碼少乙個位元組(utf8= 1.5 * gbk),因此有時候採用gbk編碼來節省頻寬和儲存空間;對於英文本元,兩者編碼都是採用單位元組來編碼,因此無異;

例子:

對於漢字分別進行utf8gbk編碼

system.out.println("utf8: " + bytearray2binarystring("中".getbytes("utf8")));

system.out.println("gbk: " + bytearray2binarystring("中".getbytes("gbk")));

輸出如下:

utf8: 11100100

10111000

10101101

gbk: 11010110

11010000

總結:

-utf8unicode字符集的一種編碼方式,主要用與資訊傳輸和儲存;

-gbk編碼對於漢字要比utf8節省空間,但是不是全球通用,有些環境下會出現亂碼;

-utf-8中大部分漢字採用3位元組表示,少些複雜的字採用4位元組表示;分別對應的unicode也是2位元組和3位元組;

mysql常見字符集 MySQL字符集

一.字符集介紹 什麼是字符集 charset 字符集 是乙個系統支援的所有抽象字元的集合。字元是各種文字和符號的總稱,包括各國家文字 標點符號 圖形符號 數字等。1.gbk gb2312 gbk gb2312 採用雙位元組字符集,不論中 英文本元均使用雙字元來表示,為了區分中文,將其最高位都設定成1...

常見字符集 亂碼問題

常用字符集分類 ascii及其擴充套件字符集 作用 表語英語及西歐語言。位數 ascii是用7位表示的,能表示128個字元 其擴充套件使用8位表示,表示256個字元。範圍 ascii從00到7f,擴充套件從00到ff。iso 8859 1字符集 作用 擴充套件ascii,表示西歐 希臘語等。位數 8...

字符集 字元編碼方式

字符集 字元編碼方式 字符集 character set 是多個字元的集合,字符集種類較多,每個字符集包含的字元個數不同,這裡的字元可以是英文本元,漢字字元,或者其他國家語言字元。常見字符集包括 ascii字符集 latin1字符集 gb2312字符集 gbk字符集 gb18030字符集 unico...