成都網(wǎng)站建設(shè)愛特通品牌推廣渠道有哪些
字符集、IO流(一)
各位同學(xué),前面我們已經(jīng)學(xué)習(xí)了File類,通過File類的對象可以對文件進行操作,但是不能操作文件中的內(nèi)容。要想操作文件中的內(nèi)容,我們還得學(xué)習(xí)IO流。但是在正式學(xué)習(xí)IO流之前,我們還需要學(xué)習(xí)一個前置知識叫做字符集,只有我們把字符集搞明白了,再學(xué)習(xí)IO流才會更加絲滑。
一、字符集
1.1 字符集的來歷
我們知道計算機是美國人發(fā)明的,由于計算機能夠處理的數(shù)據(jù)只能是0和1組成的二進制數(shù)據(jù),為了讓計算機能夠處理字符,于是美國人就把他們會用到的每一個字符進行了編碼(所謂編碼,就是為一個字符編一個二進制數(shù)據(jù)),如下圖所示:
美國人常用的字符有英文字母、標點符號、數(shù)字以及一些特殊字符,這些字符一共也不到128個,所以他們用1個字節(jié)來存儲1字符就夠了。 美國人把他們用到的字符和字符對應(yīng)的編碼總結(jié)成了一張碼表,這張碼表叫做ASCII碼表(也叫ASCII字符集)。
其實計算機只在美國用是沒有問題的,但是計算機慢慢的普及到全世界,當普及到中國的時候,在計算機中想要存儲中文,那ASCII字符集就不夠用了,因為中文太多了,隨便數(shù)一數(shù)也有幾萬個字符。
于是中國人為了在計算機中存儲中文,也編了一個中國人用的字符集叫做GBK字符集,這里面包含2萬多個漢字字符,GBK中一個漢字采用兩個字節(jié)來存儲,為了能夠顯示英文字母,GBK字符集也兼容了ASCII字符集,在GBK字符集中一個字母還是采用一個字節(jié)來存儲。
1.2 漢字和字母的編碼特點
如果一個文件中既有中文,也有英文,那計算機怎么知道哪幾個字節(jié)表示一個漢字,哪幾個字節(jié)表示一個字母呢?
比如:在文件中存儲一個我a你
,底層其實存儲的是這樣的二進制數(shù)據(jù)。
需要我們注意漢字和字母的編碼特點:
-
-
如果是存儲字母,采用1個字節(jié)來存儲,一共8位,其中第1位是0
-
如果是存儲漢字,采用2個字節(jié)來存儲,一共16位,其中第1位是1
-
當讀取文件中的字符時,通過識別讀取到的第1位是0還是1來判斷是字母還是漢字
如果讀取到第1位是0,就認為是一個字母,此時往后讀1個字節(jié)。
如果讀取到第1位是1,就認為是一個漢字,此時往后讀2個字節(jié)。
1.3 Unicode字符集
同學(xué)們注意了,咱們國家可以用GBK字符集來表示中國人使用的文字,那世界上還有很多其他的國家,他們也有自己的文字,他們也想要自己國家的文字在計算機中處理,于是其他國家也在搞自己的字符集,就這樣全世界搞了上百個字符集,而且各個國家的字符集互不兼容。 這樣其實很不利于國際化的交流,可能一個文件在我們國家的電腦上打開好好的,但是在其他國家打開就是亂碼了。
為了解決各個國家字符集互不兼容的問題,由國際化標準組織牽頭,設(shè)計了一套全世界通用的字符集,叫做Unicode字符集。在Unicode字符集中包含了世界上所有國家的文字,一個字符采用4個自己才存儲。
在Unicode字符集中,采用一個字符4個字節(jié)的編碼方案,又造成另一個問題:如果是說英語的國家,他們只需要用到26大小寫字母,加上一些標點符號就夠了,本身一個字節(jié)就可以表示完,用4個字節(jié)就有點浪費。
于是又對Unicode字符集中的字符進行了重新編碼,一共設(shè)計了三種編碼方案。分別是UTF-32、UTF-16、UTF-8; 其中比較常用的編碼方案是UTF-8
下面我們詳細介紹一下UTF-8這種編碼方案的特點。
1.UTF-8是一種可變長的編碼方案,工分為4個長度區(qū) 2.英文字母、數(shù)字占1個字節(jié)兼容(ASCII編碼) 3.漢字字符占3個字節(jié) 4.極少數(shù)字符占4個字節(jié)
1.4 字符集小結(jié)
最后,我們將前面介紹過的字符集小結(jié)一下
ASCII字符集:《美國信息交換標準代碼》,包含英文字母、數(shù)字、標點符號、控制字符特點:1個字符占1個字節(jié) ? GBK字符集:中國人自己的字符集,兼容ASCII字符集,還包含2萬多個漢字特點:1個字母占用1個字節(jié);1個漢字占用2