成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

徹底搞明白 Gb2312、Gbk 和 Gb18030

開發(fā) 前端
日常工作的過程中,關(guān)于字符編碼的問題經(jīng)常讓人頭疼不已,這篇文章就來捋一捋關(guān)于 GB2312、GBK、GB18030 相關(guān)的知識(shí) 以及它們和 Unicode 的關(guān)系。

[[436829]]

本文轉(zhuǎn)載自微信公眾號(hào)「Linux開發(fā)那些事兒」,作者LinuxThings。轉(zhuǎn)載本文請(qǐng)聯(lián)系Linux開發(fā)那些事兒公眾號(hào)。

日常工作的過程中,關(guān)于字符編碼的問題經(jīng)常讓人頭疼不已,這篇文章就來捋一捋關(guān)于 GB2312、GBK、GB18030 相關(guān)的知識(shí) 以及它們和 Unicode 的關(guān)系。

簡(jiǎn)介

  • GB2312

1980 年,中國(guó)發(fā)布了第一個(gè)漢字編碼標(biāo)準(zhǔn),也即 GB2312 ,全稱 《信息交換用漢字編碼字符集·基本集》,通常簡(jiǎn)稱 GB (“國(guó)標(biāo)”漢語(yǔ)拼音首字母), 共收錄了 6763 個(gè)常用的漢字和字符,此標(biāo)準(zhǔn)于次年5月實(shí)施,它滿足了日常 99% 漢字的使用需求

  • GBK

由于有些漢字是在 GB2312 標(biāo)準(zhǔn)發(fā)布之后才簡(jiǎn)化的,還有一些人名、繁體字、日語(yǔ)和朝鮮語(yǔ)中的漢字也沒有包括在內(nèi),所以,在 GB2312 的基礎(chǔ)上添加了這部分字符,就形成了 GBK ,全稱 《漢字內(nèi)碼擴(kuò)展規(guī)范》,共收錄了兩萬(wàn)多個(gè)漢字和字符,它完全兼容 GB2312

GBK 于 1995 年發(fā)布,不過它只是 "技術(shù)規(guī)范指導(dǎo)性文件",并不屬于國(guó)家標(biāo)準(zhǔn)

  • GB18030

GB18030 全稱《信息技術(shù) 中文編碼字符集》 ,共收錄七萬(wàn)多個(gè)漢字和字符, 它在 GBK 的基礎(chǔ)上增加了中日韓語(yǔ)中的漢字 和 少數(shù)民族的文字及字符,完全兼容 GB2312,基本兼容 GBK

GB18030 發(fā)布過兩個(gè)版本,第一版于 2000 年發(fā)布,稱為 GB18030-2000,第二版于 2005 年發(fā)布,稱為 GB18030-2005

編碼方式

ASICII、GB2312、GBK、GB18030 之間的關(guān)系可以用下圖表示

GB2312 兼容 ASICII 編碼, GBK 兼容 GB2312 編碼,GB18030 兼容 GB2312 編碼 和 GBK 編碼

實(shí)際生活中,我們用到的 99% 的漢字,都屬于 GB2312 編碼范圍 ,GB2312 每個(gè)編碼對(duì)應(yīng)的是哪個(gè)漢字可以參考 GB2312簡(jiǎn)體中文編碼表, GBK 編碼可以參考 GBK編碼表, GB18030 可以參考 GB18030-2005 文檔

GB2312 編碼

GB2312 把每個(gè)漢字都編碼成兩個(gè)字節(jié),第一個(gè)字節(jié)是高位字節(jié),第二個(gè)字節(jié)是低位字節(jié)

GB2312 為了兼容 ASICII ,其編碼需要進(jìn)行一些轉(zhuǎn)換才能避免和 ASICII 編碼重疊,轉(zhuǎn)換的過程涉及到區(qū)位碼和國(guó)標(biāo)碼的概念,下面說明轉(zhuǎn)成內(nèi)碼的過程

  • 區(qū)位碼

GB2312 對(duì)漢字進(jìn)行了分區(qū)處理,每個(gè)區(qū)含有 94 個(gè)漢字或者字符,總共有 94 個(gè)區(qū),每個(gè)漢字或者字符都對(duì)應(yīng)一個(gè) 分區(qū)編號(hào)和分區(qū)內(nèi)的位置編號(hào),稱為 區(qū)位碼

比如:漢字 "中" 字的 分區(qū)編號(hào)是 54,分區(qū)內(nèi)位置編號(hào)是 48,所以,"中" 字的區(qū)位碼是 54 48

  • 國(guó)標(biāo)碼

國(guó)標(biāo)碼 也叫 交換碼,用于交換文件所使用的編碼,在早期,不同的操作系統(tǒng)可能使用不同的內(nèi)碼,如果它們之間要交換文件,則會(huì)發(fā)生亂碼的現(xiàn)象,當(dāng)時(shí)的解決方法是交換文件之前先轉(zhuǎn)成交換碼再交換,接收者收到之后再轉(zhuǎn)成內(nèi)碼

交換碼是比較早期的一種方案,目前系統(tǒng)大都采用內(nèi)碼作為交換碼

ASICII 碼為 0- 31 的這 32 個(gè)字符是不可顯示的字符,為了避免和這些字符的碼點(diǎn)沖突,將 分區(qū)編號(hào)和分區(qū)內(nèi)位置編號(hào)都加上 32 ,把這個(gè)轉(zhuǎn)換的結(jié)果稱為 國(guó)標(biāo)碼

比如:漢字 "中" 字分區(qū)編號(hào)是 54,分區(qū)內(nèi)位置編號(hào)是 48,加上 32 之后,分區(qū)編號(hào)是 54 + 32 = 86, ,分區(qū)內(nèi)位置編號(hào)是 48 + 32 = 80,所以 "中" 字 的國(guó)標(biāo)碼是 86 80

  • 內(nèi)碼

國(guó)標(biāo)碼 和 ASICII 碼還是存在一定的重復(fù),比如 "中" 字 的國(guó)標(biāo)碼是 86 80,對(duì)應(yīng)第一個(gè)字節(jié)是 86,第二個(gè)字節(jié)是 80,而在 ASICII 碼中它們分別代表大寫字母V 和 大寫字母 P,這就無法區(qū)分它們到底是一個(gè)漢字,還是兩個(gè)字母

為了解決這一點(diǎn),把國(guó)標(biāo)碼中的每個(gè)字節(jié)的最高位置為 1,也即相當(dāng)于每個(gè)字節(jié)都加上 128 ( 2的7次方 ),還是以 "中" 字為例,它的 國(guó)標(biāo)碼是 86 80,加上 128 后, 第一個(gè)字節(jié)是 86 + 128 = 214, 第二個(gè)字節(jié)是 80 + 128 = 208,轉(zhuǎn)化成 16 進(jìn)制是 0xD6 0xD0 ( 214 的十六進(jìn)制是 0xD6, 208 的十六進(jìn)制是 0xD0 )

國(guó)標(biāo)碼的每個(gè)字節(jié)都加上 128 后,得到國(guó)標(biāo)碼的機(jī)內(nèi)碼,簡(jiǎn)稱 內(nèi)碼,漢字是以內(nèi)碼的形式在計(jì)算機(jī)中存儲(chǔ)和傳播的

上面介紹 區(qū)位碼 和 國(guó)標(biāo)碼,主要是是為了說明 漢字內(nèi)碼是如何一步一步發(fā)展而來的

可以看出,漢字的 區(qū)位碼 + 32 + 128 就得到了內(nèi)碼,進(jìn)一步簡(jiǎn)化,區(qū)位碼 + 32 + 128 = 區(qū)位碼 + 160 = 區(qū)位碼 + 0xA0(128 的十六進(jìn)制) , 因此 內(nèi)碼 = 區(qū)位碼 + 0xA0

比如:"中" 字的區(qū)位碼是 54 48,對(duì)應(yīng)的十六進(jìn)制是0x36 0x30,因此它的內(nèi)碼為 (0x36 + 0xA0) (0x30 + 0xA0),也即 0xD6 0xD0

關(guān)于漢字的區(qū)位碼請(qǐng)參考:漢字區(qū)位碼

GB2312 有效的編碼范圍如下圖所示

上圖中 紅色欄 表示 ASICII 的編碼范圍,綠色欄表示 GB2312 編碼范圍

GBK 編碼

和 GB2312 一樣,GBK 也是雙字節(jié)編碼,為了向下兼容 GB2312, GBK 使用了 GB2312 沒有用到的編碼區(qū)域,總的編碼范圍是: 第一個(gè)字節(jié) 0x81–0xFE,第二個(gè)字節(jié) 0x40–0xFE, 具體的編碼范圍細(xì)分如下

上述表格中,紅色欄是 GBK 中包含的 GB2312 以及 ASICII 的編碼范圍,它們的編碼范圍保持不變

綠色欄的是 GBK 新增的編碼范圍

紫色欄是 用戶自定義編碼范圍

GB18030 編碼

與 GBK 不同的是,GB18030 是變長(zhǎng)多字節(jié)字符集,每個(gè)字或字符可以由一個(gè),兩個(gè)或四個(gè)字節(jié)組成,所以它的編碼空間是很大的,最多可以容納 161 萬(wàn)個(gè)字符

由于需要兼容 GBK,四個(gè)字節(jié)的前兩個(gè)字節(jié)和 GBK 編碼保持一致,GB18030 具體的編碼范圍如下

GB18030 與 Unicode

GB18030 和 Unicode 相當(dāng)于兩套單獨(dú)的編碼體系,它們都對(duì)世界上大部分字符進(jìn)行編碼,賦予每個(gè)字符一個(gè)唯一的編號(hào),只不過對(duì)于同一個(gè)字符,GB18030 和 Unicode 對(duì)應(yīng)的編號(hào)是不一樣的, 比如:漢字 "中" 字的 GB18030 編碼是 0xD6D0, 對(duì)應(yīng)的 Unicode 碼元是 0x4E2D, 從這一點(diǎn)上可以認(rèn)為 GB18030 是一種 Unicode 的轉(zhuǎn)換格式

注意:要表達(dá) Unicode 的編碼格式才真正算得上 Unicode 轉(zhuǎn)換格式,所以嚴(yán)格意義上說 GB18030 并不是真正的 Unicode 轉(zhuǎn)換格式

GB18030 既是字符集又是編碼格式,也即字符在字符集中的編號(hào)以及存儲(chǔ)是進(jìn)行編碼用的編號(hào)是完全相同的,而 Unicode 僅僅是字符集,它只規(guī)定了字符的唯一編號(hào),它的存儲(chǔ)是用其他的編碼格式的,比如 UTF8、UTF16 等等

既然 GB18030 和 Unicode 都能表示世界上大部分字符,為什么要弄兩套字符集呢,一套的話不更有利于信息的傳播嗎?

1、在 Unicode 出現(xiàn)之前,沒有統(tǒng)一的字符編碼,每個(gè)操作系統(tǒng)上都有自己的一套編碼標(biāo)準(zhǔn),像早期的 window 上需要安裝字符集,才能支持中文,這里的字符集就是微軟自定的標(biāo)準(zhǔn),換個(gè)其他系統(tǒng)就會(huì)失效

2、對(duì)于大部分中文字符來說,采用 GB18030 編碼的話,只需兩個(gè)字節(jié),如果采用 UTF8 編碼,就需要三個(gè)字節(jié), 所以用 GB18030 存儲(chǔ)和傳輸更節(jié)省空間

ASICII、GB2312、GBK、GB18030 以及 UTF8 的關(guān)系

它們的關(guān)系如下圖

由上圖可知,GB2312、GBK、GB18030 以及 UTF8 共同點(diǎn)是都兼容 ASICII

全角和半角字符

使用輸入法輸入字符的時(shí)候,有全角和半角之分,對(duì)于同一個(gè)字符,全角和半角對(duì)應(yīng)的碼點(diǎn)是不一樣的

下面列出了一些字符的全角和半角的外觀截圖

半角是 ASICII 碼中的字符,對(duì)應(yīng)的編碼范圍是 0x00 - 0x7F,每個(gè)字符占一個(gè)字節(jié)

全角是 GB2312 中的字符,每個(gè)字符占用兩個(gè)字節(jié) ,其編碼范圍和半角字符范圍是沒有重疊的

對(duì)于漢字來說,是沒有全角和半角之分的

比如:上圖中 @ 符號(hào),全角的編碼是 0xA3C0,占兩個(gè)字節(jié), 半角的編碼是 0x40,占一個(gè)字節(jié)

通過內(nèi)碼輸入漢字的方法

有時(shí)需要輸入一些特殊的字符,比如 帶圓圈的數(shù)字字符 ①,一般需要借助輸入法的小鍵盤來輸入

這里介紹一種使用字符內(nèi)碼來快速輸入的方法: 按住 Alt 鍵不放,輸入字符內(nèi)碼的十進(jìn)制,輸入完后松開 Alt 鍵

例如,輸入帶圓圈的數(shù)字 ② 的步驟

1、查找?guī)A圈數(shù)字 2 的字符的編碼 0xA2DA,十進(jìn)制是 41690

2、按住 Alt 鍵不放,輸入 41690,松開 Alt 鍵

3、輸入完畢,這時(shí)就會(huì)出現(xiàn)字符 ②

一般 Linux的 SSH 連接工具 或 windows 上的記事本,都支持內(nèi)碼輸入

 

責(zé)任編輯:武曉燕 來源: Linux開發(fā)那些事兒
相關(guān)推薦

2024-02-20 13:12:00

UnicodeUTF-8GB2312

2010-01-08 16:50:51

Ubuntu SCIM

2024-05-13 10:45:25

中介模式面向?qū)ο?/a>數(shù)量

2024-05-10 08:43:04

外觀模式接口系統(tǒng)

2024-05-09 09:09:19

組合模式對(duì)象

2019-08-27 14:46:59

ElasticSearES數(shù)據(jù)庫(kù)

2024-05-11 14:18:44

迭代器模式業(yè)務(wù)

2024-05-17 10:08:59

享元模式分類方式

2023-12-08 08:18:41

代號(hào)UnicodeUTF-8

2024-05-15 17:41:37

備忘錄模式多線程

2024-06-03 14:09:48

2023-12-27 08:16:54

Sessiontoken安全性

2023-06-12 07:20:39

2012-11-09 13:42:33

Google Clou

2011-06-13 16:16:32

Qt 中文問題

2009-02-19 09:49:45

希捷單碟500GBHDD

2010-12-22 17:03:32

西蒙協(xié)同測(cè)試

2022-02-28 09:44:09

Linux硬鏈接軟鏈接

2009-11-26 16:43:11

PHP截取中文字符串

2009-12-02 09:49:43

PHP Ajax亂碼
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

主站蜘蛛池模板: 日本亚洲一区二区 | 欧美日韩在线电影 | 亚洲一区二区在线播放 | 国内自拍偷拍一区 | 欧美aaa一级片 | 成人免费网站 | 国产视频久久久 | 国产美女一区 | 中文字幕国产精品 | 日本电影一区二区 | 无毛av | 在线观看免费av网 | 亚洲欧美综合网 | 国产aa | 国产一级成人 | 91av在线电影 | 一级片子 | 伊人久久精品 | 日本一区二区三区四区 | 亚洲不卡在线视频 | 久久精品亚洲欧美日韩精品中文字幕 | 日日爱视频 | 久久精品国产免费高清 | 久久91精品国产 | 日韩在线视频观看 | 国产91精品网站 | 欧美一级小视频 | 亚洲电影一区 | 粉色午夜视频 | 精品国产伦一区二区三区观看方式 | 日韩欧美在线观看 | 成人a在线 | 91亚洲视频在线 | 久久精品一区二区 | 99在线播放| 亚洲精品乱码久久久久久蜜桃91 | 51ⅴ精品国产91久久久久久 | 亚洲欧美一区二区三区国产精品 | 一区二区日韩 | 日本免费一区二区三区四区 | 色婷婷久久久亚洲一区二区三区 |