立即注冊 登錄
返回首頁

uid:142652的個人空間

日志

計算機常見編

已有 12494 次閱讀2017-8-2 08:50 |個人分類:計算機編碼| 計算機常見編

總是被各種編碼搞得暈頭轉(zhuǎn)向的,讀了這篇文章后 宋紅康_計算機常見編碼 不再糾結(jié)了。
一. 有關(guān)編碼的基礎(chǔ)知識

計算機常見編碼


 

1.  bit 最小的單元

字節(jié) byte 機器語言的單位

1byte=8bits 1KB=1024byte 1MB=1024KB

1GB=1024MB

2. 二進制 binary

八進制 octal

十進制 decimal

十六進制 hex

3. 字符:是各種文字和符號的總稱,包括各個國家的文字,標(biāo)點符號,圖形符號,數(shù)字等。

字符集:字符集是多個符號的集合,每個字符集包含的字符個數(shù)不同。

字符編碼:字符集只是規(guī)定了有哪些字符,而最終決定采用哪些字符,每一個字符用多少字節(jié)表示等問題,則是由編碼來決定的。計算機要準(zhǔn)確的處理各種字符集文字,需要進行字符編碼,以便計算機能夠識別和存儲各種文字。

 

二. 常見字符集的編碼介紹:

常見的字符集有:ASCII 字符集,GB2312 字符集,BIG5 字符集,GB18030 字符集,

Unicode 字符集,下面一一介紹:

1. ASCII 字符集:

定義:

美國信息互換標(biāo)準(zhǔn)代碼,是基于羅馬字母表的一套電腦編碼系統(tǒng),主要顯示  英語和一些西歐語言,是現(xiàn)今最通用的單字節(jié)編碼系統(tǒng)。

包含內(nèi)容:

控制字符(回車鍵,退格,換行鍵等)

可顯示字符(英文大小寫,阿拉伯?dāng)?shù)字,西文符號)

擴展字符集(表格符號,計算符號,希臘字母,拉丁符號)

編碼方式:

0-31 號及 127 號是控制字符或通訊專用字符;

32-126 號是字符,其中 48-57 號為 0-9 十個阿拉伯?dāng)?shù)字,65-90 號為 26 個大寫英文字母,97-122 號為 26 個英文小寫字母,其余為一些標(biāo)點符號,運算符號等。

在計算機存儲單元中,一個 ASCII 碼值占一個字節(jié)8 個二進制位,最高位是用作奇偶檢驗位!酒媾夹r炇侵福涸诖a傳送的過程中,用來檢驗是否出錯的一種方法!科媾夹r灧譃槠嫘r灪团夹r灐F嫘r炓(guī)定:正確的代


碼一個字節(jié)中 1 的個數(shù)必須是奇數(shù),若非奇數(shù),則在最高位添 1;偶校驗規(guī)

定:正確的代碼一個字節(jié)中 1 的個數(shù)必須是奇數(shù),若非奇數(shù),則在最高位添

1

 

2. GB2312 字符集:

定義:

信息交換用漢字編碼字符集。是中國標(biāo)準(zhǔn)的簡體中文字符集,它所收錄的漢字已經(jīng)覆蓋 99.75%的使用頻率,在中國大陸和新加坡廣泛使用。

包含內(nèi)容:

GB2312 收錄了簡化漢字及一般字符,序號,數(shù)字,拉丁字母,日文假名, 希臘字母,俄文字母,漢語拼音符號,漢語注音字母,共 7445 個圖形字符。其中包括 6763 個漢字,一級漢字 3755 個,二級漢字 3008 個。

編碼方式:

GB2312 對所收漢字進行了“分區(qū)”處理,每區(qū)含有 94 個漢字或者符號,這種表示方法也叫做“區(qū)位碼”。

它是用雙字節(jié)表示的,前面的字節(jié)為第一字節(jié),又稱“高字節(jié)”,后面的為第二字節(jié),“低字節(jié)”。

高位字節(jié),把 01-87 區(qū)的區(qū)號加上 0xA0相當(dāng)于數(shù)字 160;低位字節(jié)把 01-94

區(qū)的區(qū)號加上 0xA0相當(dāng)于數(shù)字 160。 舉個簡單的小例子:第一個漢字

—“啊”,它的區(qū)號為 16,位號 01,則區(qū)位碼是 1601。則高字節(jié)位:

16+0xA0=0xB0;低字節(jié)位:01+0xA0=0xA1,所以“啊”的漢字處理編碼為

0xB0A1。

 

3. GBK 字符集:

定義:

GBK GB2312 字符集的擴展(K(中國的中文編碼表升級,融合了更多的中文文字符號。),它收錄了 21886 個符號,它分為漢字區(qū)和圖形符號區(qū), 漢字區(qū)包括 21003 個字符。GBK 字符集主要擴展了繁體中文字的支持。

 

4. BIG5 字符集:

定義:

又稱大五碼,由臺灣五家軟件公司創(chuàng)立。因為當(dāng)時臺灣沒有一個標(biāo)準(zhǔn)的字符集,而且GB2312 又沒有收錄繁體字,所以才推出了BIG5

包含內(nèi)容:

BIG5 字符集共收錄了 13053 個中文字,該字符集在臺灣使用。但是沒有考慮到社會上流通的人名,地方用字,方言用字,化學(xué)及生物科等用字,沒有包含日文平假名及片假字母。

編碼方式:

BIG5 也采用雙字節(jié)存儲方法,一兩個字節(jié)編碼一個字。高位字節(jié)的編碼范圍 0xA1-0xF9,低位字節(jié)的編碼范圍是 0xA1-0xFE。


5. GB18030 字符集:

定義:

GB18030 字符集標(biāo)準(zhǔn)解決漢字,日文假名,朝鮮語和中國少數(shù)民族文字組成的大字符集計算機編碼問題。

包含內(nèi)容:

該標(biāo)準(zhǔn)的字符總編碼空間超過 150 萬個編碼位,收錄了 27484 個漢字,覆蓋中文,日文,朝鮮語和中國少數(shù)民族文字。滿足中國大陸,香港,臺灣,日本和韓國等東南亞地區(qū)信息交換多文種,大字量,多用途,統(tǒng)一編碼格式的要求。

編碼方式:

GB8030 標(biāo)準(zhǔn)采用單字節(jié),雙字節(jié)和四字節(jié)三種方式對字符編碼。 單字節(jié)部分使用 0x00-0x7F 碼(對應(yīng)于ASCII 碼的相應(yīng)碼;

雙字節(jié)部分,首字節(jié)碼從 0x81-0xFE,尾字節(jié)碼分別是 0x40-0x7E 0x80-0xFE。四字節(jié)部分采用 0x30-0x39 作為雙字節(jié)編碼擴充的后綴,這樣擴充的四字節(jié)編碼,其范圍是 0x81308130-0x0xFE39FE39,其中第一,三個字節(jié)編碼位均為0x81-0xFE,第二,四個為 0x30-0x39。

 

6. ISO8859-1:拉丁碼表。歐洲碼表用一個字節(jié)的 8 位表示。

 

7. Unicode 字符集:

定義:

國際標(biāo)準(zhǔn)碼,融合了多種文字。所有文字都用兩個字節(jié)來表示,Java  語言使用的就是 unicode University multiple-object coded character set(通用多八位編碼字符集,支持世界上超過 650 種語言的國際字符。Unicode 允許在同一服務(wù)器上混合使用不同語言,它為每種語言的每個字符設(shè)定了統(tǒng)一并且唯一的二進制編碼,以滿足跨平臺,跨語言進行文本轉(zhuǎn)換,處理的要求

編碼方式:

Unicode 標(biāo)準(zhǔn)始終使用十六進制數(shù)字,固定使用 2 個字節(jié)來表示一個字符, 共可以表示 65536 個字符。而且書寫時在前面加上前綴U+”,例如 A 的編碼是 004116,則書寫成U+0041”。

Unicode 字符集包含的編碼方案:

Ø UTF-8 最多用三個字節(jié)來表示一個字符。

UTF8  unicode 其中的一個使用方式。UTF 的意思是: unicode translation format,即把 unicode 轉(zhuǎn)作某種格式的意思。UTF-8使用可變長度字節(jié)來存儲 unicode 字符,如 ASCII 字母還是采用一個字符來存儲,希臘字母等采用 2 個字符來存儲,而常用的漢字要使 3 字節(jié),輔助平面字符則使用 4 字節(jié)。

Ø UTF-16

使用一個或兩個未分配的 16 位代碼單元的序列對 unicode 代碼


點進行編碼,即 2 個字節(jié)表示一個字符。

Ø UTF-32

將每一個unicode 代碼點表示為相同值的 32 位整數(shù)。

Ø 關(guān)于 unicode 編碼的一個問題:

使 , ANSI , GBK,Unicode , unicode big endian UTF-8 這幾種編碼之間相互轉(zhuǎn)換。同樣是 txt 文件,windows 是怎么識別編碼的呢?

答:平時注意的話可以發(fā)現(xiàn) Unicodeunicode big endian UTF-8

編碼的 txt  文件的開頭會多出幾個字節(jié),分別是(FF,FE),FE,FF),

EF,BB,BF。那么這些標(biāo)記都是基于什么標(biāo)準(zhǔn)呢?

ANSI 字符集:ASCII 字符集,以及由此派生并兼容的字符集。

UTF-16 UTF-8:如“連通”兩個字,在 UTF-16 中為:DE 8F 1A 90兩個字節(jié)決定一個漢字;在 UTF-8 中則為:E8 BF 9E E9 80 9A,即 3 個字節(jié)決定一個字符。

當(dāng)一個軟件打開一個文本時,首先是要決定這個文本究竟是使用哪種字符集的哪種編碼保存的,軟件一般采用三種方式來決定文本的字符集和編碼:檢測文件頭標(biāo)識,提示用戶選擇,根據(jù)一定的規(guī)則猜測。不同編碼方式的開頭字節(jié)如下:

EF BB BF UTF-8

FF FE UTF-16little endian

FE FF UTF-16,big endian FF FE 00 00 UTF-32 little endian 00 00 FE FF UTF-32,big endian

注:endian 是指字節(jié)序,big endian(大尾 little endian(小尾) CPU 處理多字節(jié)數(shù)的不同方式。例如“漢”的 unicode 編碼 6C49,寫到文件中,如果將 6C 寫在前面就是 big endian,將 49 寫在前面就是little endian

 

 

8.總結(jié):

ASCII,GB2312,GBK GB18030,這些編碼方法是向下兼容的,即同一個字符在這些方案中總是有相同的編碼,后面的標(biāo)準(zhǔn)支持更多的字符。在這些編碼中,英文和中文可以統(tǒng)一的處理。區(qū)分中文編碼的方法是高字節(jié)的最高位不為

0。

計算機使用的缺省編碼方式就是計算機的內(nèi)碼。有的中文 windows 的缺省內(nèi)碼還是GBK,可以通過 GB18030 升級包升級到 GB1030。不過相對 GBK 新增的字符,普通人很難用到的,通常我們用GBK 來指代中文windows 內(nèi)碼。

GB2312 的原文是區(qū)位碼,從區(qū)位碼到內(nèi)碼,需要在高字節(jié)和低字節(jié)上分別加上A0。


路過

雞蛋

鮮花

握手

雷人

評論 (0 個評論)

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機教程網(wǎng)

返回頂部