标准ASCII 码也叫基础ASCII码,使用7 位二进制数(剩下的1位二进制为0)来表示所有的大写和小写字母,数字0 到9、标点符号,以及在美式英语中使用的特殊控制字符。
其中:
0~31及127(共33个)是控制字符或通信专用字符(其余为可显示字符),如控制符:LF(换行)、CR(回车)、FF(换页)、DEL(删除)、BS(退格)、BEL(响铃)等;通信专用字符:SOH(文头)、EOT(文尾)、ACK(确认)等;ASCII值为8、9、10 和13 分别转换为退格、制表、换行和回车字符。它们并没有特定的图形显示,但会依不同的应用程序,而对文本显示有不同的影响 。
32~126(共95个)是字符(32是空格),其中48~57为0到9十个阿拉伯数字。65~90为26个大写英文字母,
97~122号为26个小写英文字母,其余为一些标点符号、运算符号等。
百度百科
此字符集支持部分于欧洲使用的语言,包括阿尔巴尼亚语、巴斯克语、布列塔尼语、加泰罗尼亚语、丹麦语、荷兰语、法罗语、弗里西语、加利西亚语、德语、格陵兰语、冰岛语、爱尔兰盖尔语、意大利语、拉丁语、卢森堡语、挪威语、葡萄牙语、里托罗曼斯语、苏格兰盖尔语、西班牙语及瑞典语。
百度百科
ISO/IEC 8859-1 (Latin-1) | 西欧语言 |
ISO/IEC 8859-2 (Latin-2) | 中欧语言 |
ISO/IEC 8859-3 (Latin-3) | 南欧语言。世界语也可用此字符集显示。 |
ISO/IEC 8859-4 (Latin-4) | 北欧语言 |
ISO/IEC 8859-5 (Cyrillic) | 斯拉夫语言 |
ISO/IEC 8859-6 (Arabic) | 阿拉伯语 |
ISO/IEC 8859-7 (Greek) | 希腊语 |
ISO/IEC 8859-8 (Hebrew) | 希伯来语(视觉顺序) |
ISO 8859-8-I | 希伯来语(逻辑顺序) |
ISO/IEC 8859-9 (Latin-5 或 Turkish) | 它把Latin-1的冰岛语字母换走,加入土耳其语字母。 |
ISO/IEC 8859-10 (Latin-6 或 Nordic) | 北日耳曼语支,用来代替Latin-4。 |
ISO/IEC 8859-11 (Thai) | 泰语,从泰国的 TIS620 标准字集演化而来。 |
ISO/IEC 8859-13 (Latin-7 或 Baltic Rim) | 波罗的语族 |
ISO/IEC 8859-14 (Latin-8 或 Celtic) | 凯尔特语族 |
ISO/IEC 8859-15 (Latin-9) | 西欧语言,加入Latin-1欠缺的芬兰语字母和大写法语重音字母,以及欧元(?符号。 |
ISO/IEC 8859-16 (Latin-10) | 东南欧语言。主要供罗马尼亚语使用,并加入欧元符号。 |
《信息交换用汉字编码字符集》是由中国国家标准总局1980年发布,1981年5月1日开始实施的一套国家标准,标准号是GB 2312—1980。
GB2312编码适用于汉字处理和汉字信息交互等,一般在大陆使用,新加坡也用这套编码。
GB2312编码基本集收入汉字6763个汉字和682个非汉字图形字符。而整个字符集分94个区,每个区又分94个位,每个区位只有一个字符,于是,这种用区和位来对汉字编码,称为区位码。
01-09区 |
特殊符号 |
16-55区 |
一级汉字,按拼音排序 |
56-87区 |
二级汉字,按部首/笔画排序 |
10-15区 |
未有编码 |
88-94区 |
未有编码 |
例如,“啊”字是GB2312之中的第一个汉字,它的区位码就是1601。
同理,可以从表中找到“白”字的区位码是1655。
注意,以上讲的是区位码,下面将字符的编码。
在使用GB2312的程序中,通常采用EUC储存方法,以便兼容于ASCII。浏览器编码表上的“GB2312”,通常都是指“EUC-CN”表示法。
每个汉字及符号以两个字节来表示。第一个字节称为“高位字节”(也称“区字节)”,第二个字节称为“低位字节”(也称“位字节”)。
“高位字节”使用了0xA1-0xF7(把01-87区的区号加上0xA0),“低位字节”使用了0xA1-0xFE(把01-94加上 0xA0)。 由于一级汉字从16区起始,汉字区的“高位字节”的范围是0xB0-0xF7,“低位字节”的范围是0xA1-0xFE,占用的码位是 72*94=6768。其中有5个空位是D7FA-D7FE。
那么,这个“啊”字的编码是什么?两个字节,0xB0(第一个字节) 0xA1(第二个字节)储存。区位码=区字节+位字节(与区位码对比:0xB0=0xA0+16,0xA1=0xA0+1)。理解了吧!或者干脆别算了,查表呗。
(完整的表格建议自行在网上查阅)
4. GBK
浩瀚的中华文化肯定不止这六七千字啊,况且还有繁体字呢。于是,一个叫GBK的字符编码标准就横空出世了。
GBK全称《汉字内码扩展规范》(GBK即“国标”、“扩展”汉语拼音的第一个字母,英文名称:Chinese Internal Code Specification) ,中华人民共和国全国信息技术标准化技术委员会1995年12月1日制订。
GBK是向下于GB2312兼容的。
GBK编码,是在GB2312-80标准基础上的内码扩展规范,使用了双字节编码方案,其编码范围从8140至FEFE(剔除xx7F),共23940个码位,共收录了21003个汉字,完全兼容GB2312-80标准,支持国际标准ISO/IEC10646-1和国家标准GB13000-1中的全部中日韩汉字,并包含了BIG5编码中的所有汉字。GBK编码方案于1995年10月制定, 1995年12月正式发布,中文版的WIN95、WIN98、WINDOWS NT以及WINDOWS 2000、WINDOWS XP、WIN 7等都支持GBK编码方案。
GBK编码中的汉字和字符是非常全面的了。
GBK 规范收录了 ISO 10646.1 中的全部 CJK 汉字和符号,并有所补充。具体包括:
GB 2312 中的全部汉字、非汉字符号。
GB 13000.1 中的其他 CJK 汉字。以上合计 20902 个 GB 化汉字。
《简化字总表》中未收入 GB 13000.1 的 52 个汉字。
《康熙字典》及《辞海》中未收入 GB 13000.1 的 28 个部首及重要构件。
13 个汉字结构符。
BIG-5 中未被 GB 2312 收入、但存在于 GB 13000.1 中的 139 个图形符号。
GB 12345 增补的 6 个拼音符号。
汉字“○”。
GB 12345 增补的 19 个竖排标点符号(GB 12345 较 GB 2312 增补竖排标点符号 29 个,其中 10 个未被 GB 13000.1 收入,故 GBK 亦不收)。
从 GB 13000.1 的 CJK 兼容区挑选出的 21 个汉字。
GB 13000.1 收入的 31 个 IBM OS/2 专用符号。
5. GB18030
那么,GB18030又是什么编码标准?
国家标准GB18030-2000《信息交换用汉字编码字符集基本集的补充》是我国继GB2312-1980和GB13000-1993之后最重要的汉字编码标准,是我国计算机系统必须遵循的基础性标准之一。
其实,你可以简单理解为是GBK的升级版。
GB 18030主要有以下特点 :
采用变长多字节编码,每个字可以由1个、2个或4个字节组成。
编码空间庞大,最多可定义161万个字符。
完全支持Unicode,无需动用造字区即可支持中国国内少数民族文字、中日韩和繁体汉字以及emoji等字符。
Big5虽普及于台湾、香港与澳门等繁体中文通行区,但长期以来并非当地的国家/地区标准或官方标准,而只是业界标准。倚天中文系统、Windows繁体中文版等主要系统的字符集都是以Big5为基准,但厂商又各自增加不同的造字与造字区,派生成多种不同版本。
2003年,Big5收录到CNS11643中文标准交换码的附录当中,获取了较正式的地位。这个最新版本称为Big5-2003。
共收录13,060个汉字及441个符号
用两个字节来为每个字符编码,第一个字节称为“高位字节”,第二个字节称为“低位字节”
各国为了在计算机字符编码里面争夺自己国家的语言字符高地,谁也不让着谁,在发展自己的字符编码时也没打算兼容其他的字符编码。看起来,有些混乱了,我想看下你的新闻,还得安装下你的文字系统,这全球化发展还怎么进行呢?
于是,一个叫ISO的组织还是出手了,他们是直截了当地干,不管你地方性的字符编码,我要重新定义一套,包含全球的所有文化文字、符合等,还给这种方案起了个名字叫Universal Multiple-Octet Coded Character Set,简称UCS,俗称UNICODE。
所以,这个UNICODE是为了解决传统的字符编码方案的局限而产生的,它为每种语言中的每个字符设定了统一并且唯一的二进制编码,以满足跨语言、跨平台进行文本转换、处理的要求。
话说的这么好听,UNICODE是怎么搞的呢?ISO着手搞这个UNICODE的时候是1990年的事了,内存发展已经有些长进了,用起来也没以前抠门了。于是这个UNICODE就被定义成两个字节表示一个字符,通通的两个字节啊,连ASCII都不放过,也是用两个字节。但是,对于ASCII这些原来用一个字节表示的字符,UNICODE保持其原来编码不变,只是将其扩展成两个字节而已,即在高字节补0。
这个UCS就是ISO定义的ISO 10646标准了,注意啊,UCS还不满足两个字节的,还有四个字节的,两个字节表示的叫UCS-2,四个字节的叫UCS-4。
那么这个UNICODE是怎么定义和分类字符的呢?看下面这个列表:
编码 | 表示字符范围 |
---|---|
0000-007F | C0控制符及基本拉丁文 (C0 Control and Basic Latin) |
0080-00FF | C1控制符及拉丁文补充-1 (C1 Control and Latin 1 Supplement) |
0100-017F | 拉丁文扩展-A (Latin Extended-A) |
0180-024F | 拉丁文扩展-B (Latin Extended-B) |
0250-02AF | 国际音标扩展 (IPA Extensions) |
02B0-02FF | 空白修饰字母 (Spacing Modifiers) |
0300-036F | 结合用读音符号 (Combining Diacritics Marks) |
0370-03FF | 希腊文及科普特文 (Greek and Coptic) |
0400-04FF | 西里尔字母(Cyrillic) |
0500-052F | 西里尔字母补充 (Cyrillic Supplement) |
0530-058F | 亚美尼亚语 (Armenian) |
0590-05FF | 希伯来文 (Hebrew) |
0600-06FF | 阿拉伯文 (Arabic) |
0700-074F | 叙利亚文 (Syriac) |
0750-077F | 阿拉伯文补充 (Arabic Supplement) |
0780-07BF | 它拿字母 (Thaana) |
07C0-07FF | 西非书面语言 (N'Ko) |
0800-085F | 阿维斯塔语及巴列维语(Avestan and Pahlavi) |
0860-087F | 曼达文字 (Mandaic) |
0880-08AF | 撒马利亚语 (Samaritan) |
0900-097F | 天城文 (Devanagari) |
0980-09FF | 孟加拉语 (Bengali) |
0A00-0A7F | 锡克教文 (Gurmukhi) |
0A80-0AFF | 古吉拉特文 (Gujarati) |
0B00-0B7F | 奥里亚文 (Oriya) |
0B80-0BFF | 泰米尔文 (Tamil) |
0C00-0C7F | 泰卢固文 (Telugu) |
0C80-0CFF | 卡纳达文 (Kannada) |
0D00-0D7F | 德拉维族语 (Malayalam) |
0D80-0DFF | 僧伽罗语 (Sinhala) |
0E00-0E7F | 泰文 (Thai) |
0E80-0EFF | 老挝文 (Lao) |
0F00-0FFF | 藏文 (Tibetan) |
1000-109F | 缅甸语 (Myanmar) |
10A0-10FF | 格鲁吉亚语(Georgian) |
1100-11FF | 朝鲜文 (Hangul Jamo) |
1200-137F | 埃塞俄比亚语 (Ethiopic) |
1380-139F | 埃塞俄比亚语补充 (Ethiopic Supplement) |
13A0-13FF | 切罗基语 (Cherokee) |
1400-167F | 统一加拿大土著语音节 (Unified Canadian Aboriginal Syllabics) |
1680-169F | 欧甘字母 (Ogham) |
16A0-16FF | 如尼文 (Runic) |
1700-171F | 塔加拉语 (Tagalog) |
1720-173F | 哈努诺文 (Hanunóo) |
1740-175F | 布希德文 (Buhid) |
1760-177F | 塔格班瓦文 (Tagbanwa) |
1780-17FF | 高棉语 (Khmer) |
1800-18AF | 蒙古文 (Mongolian) |
18B0-18FF | 加拿大原住民音节文字扩展 (Unified Canadian Aboriginal Syllabics Extended) |
1900-194F | 林布文 (Limbu) |
1950-197F | 德宏泰语 (Tai Le) |
1980-19DF | 新傣仂语 (New Tai Lue) |
19E0-19FF | 高棉语记号 (Kmer Symbols) |
1A00-1A1F | 布吉文 (Buginese) |
1A20-1AAF | 老傣文 (Tai Tham) |
1AB0-1AFF | 组合变音标记扩展 (Combining Diacritical Marks Extended) |
1B00-1B7F | 巴厘语 (Balinese) |
1B80-1BB0 | 巽他语 (Sundanese) |
1BC0-1BFF | 巴塔克文 (Batak) |
1C00-1C4F | 雷布查语(Lepcha) |
1C50-1C7F | 桑塔利文(Ol Chiki) |
1C80-1CDF | 曼尼普尔语(Meithei/Manipuri) |
1D00-1D7F | 音标扩展 (Phonetic Extensions) |
1D80-1DBF | 音标扩展补充 (Phonetic Extensions Supplement) |
1DC0-1DFF | 结合附加符号补充 (Combining Diacritics Marks Supplement) |
1E00-1EFF | 拉丁文扩充附加 (Latin Extended Additional) |
1F00-1FFF | 希腊语扩充 (Greek Extended) |
2000-206F | 常用标点(General Punctuation) |
2070-209F | 上标及下标 (Superscripts and Subscripts) |
20A0-20CF | 货币符号 (Currency Symbols) |
20D0-20FF | 组合用记号 (Combining Diacritics Marks for Symbols) |
2100-214F | 字母式符号 (Letterlike Symbols) |
2150-218F | 数字形式 (Number Form) |
2190-21FF | 箭头 (Arrows) |
2200-22FF | 数学运算符 (Mathematical Operator) |
2300-23FF | 杂项工业符号 (Miscellaneous Technical) |
2400-243F | 控制图片 (Control Pictures) |
2440-245F | 光学识别符 (Optical Character Recognition) |
2460-24FF | 封闭式字母数字 (Enclosed Alphanumerics) |
2500-257F | 制表符 (Box Drawing) |
2580-259F | 方块元素 (Block Element) |
25A0-25FF | 几何图形 (Geometric Shapes) |
2600-26FF | 杂项符号 (Miscellaneous Symbols) |
2700-27BF | 印刷符号 (Dingbats) |
27C0-27EF | 杂项数学符号-A (Miscellaneous Mathematical Symbols-A) |
27F0-27FF | 追加箭头-A (Supplemental Arrows-A) |
2800-28FF | 盲文点字模型 (Braille Patterns) |
2900-297F | 追加箭头-B (Supplemental Arrows-B) |
2980-29FF | 杂项数学符号-B (Miscellaneous Mathematical Symbols-B) |
2A00-2AFF | 追加数学运算符 (Supplemental Mathematical Operator) |
2B00-2BFF | 杂项符号和箭头 (Miscellaneous Symbols and Arrows) |
2C00-2C5F | 格拉哥里字母(Glagolitic) |
2C60-2C7F | 拉丁文扩展-C (Latin Extended-C) |
2C80-2CFF | 科普特语 (Coptic) |
2D00-2D2F | 格鲁吉亚语补充 (Georgian Supplement) |
2D30-2D7F | 提非纳文 (Tifinagh) |
2D80-2DDF | 埃塞俄比亚语扩展 (Ethiopic Extended) |
2E00-2E7F | 追加标点 (Supplemental Punctuation) |
2E80-2EFF | CJK 部首补充 (CJK Radicals Supplement) |
2F00-2FDF | 康熙字典部首 (Kangxi Radicals) |
2FF0-2FFF | 表意文字描述符 (Ideographic Description Characters) |
3000-303F | CJK 符号和标点 (CJK Symbols and Punctuation) |
3040-309F | 日文平假名 (Hiragana) |
30A0-30FF | 日文片假名 (Katakana) |
3100-312F | 注音字母 (Bopomofo) |
3130-318F | 朝鲜文兼容字母 (Hangul Compatibility Jamo) |
3190-319F | 象形字注释标志 (Kanbun) |
31A0-31BF | 注音字母扩展 (Bopomofo Extended) |
31C0-31EF | CJK 笔画 (CJK Strokes) |
31F0-31FF | 日文片假名语音扩展 (Katakana Phonetic Extensions) |
3200-32FF | 封闭式 CJK 文字和月份 (Enclosed CJK Letters and Months) |
3300-33FF | CJK 兼容 (CJK Compatibility) |
3400-4DBF | CJK 统一表意符号扩展 A (CJK Unified Ideographs Extension A) |
4DC0-4DFF | 易经六十四卦符号 (Yijing Hexagrams Symbols) |
4E00-9FBF | CJK 统一表意符号 (CJK Unified Ideographs) |
A000-A48F | 彝文音节 (Yi Syllables) |
A490-A4CF | 彝文字根 (Yi Radicals) |
A4D0-A4FF | 老傈僳文 (Lisu) |
A500-A63F | 瓦伊语 (Vai) |
A660-A6FF | 统一加拿大土著语音节补充 (Unified Canadian Aboriginal Syllabics Supplement) |
A700-A71F | 声调修饰字母 (Modifier Tone Letters) |
A720-A7FF | 拉丁文扩展-D (Latin Extended-D) |
A800-A82F | 锡尔赫特文 (Syloti Nagri) |
A840-A87F | 八思巴字 (Phags-pa) |
A880-A8DF | 索拉什特拉文 (Saurashtra) |
A8E0-A8FF | 天城文扩展 (Devanagari Extended) |
A900-A92F | 克耶里字母 (Kayah Li) |
A930-A95F | 勒姜字母 (Rejang) |
A960-A97F | 谚文扩展-A (Hangul Jamo Extended-A) |
A980-A9DF | 爪哇语 (Javanese) |
A9E0-A9FF | 缅甸文扩展-B (Myanmar Extended-B) |
AA00-AA5F | 占语字母 (Cham) |
AA60-AA7F | 缅甸文扩展-A (Myanmar Extended-A) |
AA80-AADF | 越南傣文 (Tai Viet) |
AAE0-AAFF | 曼尼普尔文扩展 (Meetei Mayek Extensions) |
AB00-AB2F | 埃塞俄比亚语字母扩展-A (Ethiopic Extended-A) |
AB30-AB6F | 拉丁文扩展-E (Latin Extended-E) |
AB70-ABBF | 切罗基语补充 (Cherokee Supplement) |
ABC0-ABFF | 曼尼普尔文 (Meetei Mayek) |
AC00-D7AF | 朝鲜文音节 (Hangul Syllables) |
D800-DB7F | 高位替代字符 (High Surrogates) |
DB80-DBFF | 高位专用替代字符 (High Private Use Surrogates) |
DC00-DFFF | 低位替代字符 (Low Surrogates) |
E000-F8FF | 私用区 (Private Use Zone) |
F900-FAFF | CJK 兼容象形文字 (CJK Compatibility Ideographs) |
FB00-FB4F | 字母表达形式 (Alphabetic Presentation Form) |
FB50-FDFF | 阿拉伯表达形式A (Arabic Presentation Form-A) |
FE00-FE0F | 变量选择符 (Variation Selector) |
FE10-FE1F | 竖排形式 (Vertical Forms) |
FE20-FE2F | 组合用半符号 (Combining Half Marks) |
FE30-FE4F | CJK 兼容形式 (CJK Compatibility Forms) |
FE50-FE6F | 小型变体形式 (Small Form Variants) |
FE70-FEFF | 阿拉伯表达形式B (Arabic Presentation Form-B) |
FF00-FFEF | 半型及全型形式 (Halfwidth and Fullwidth Form) |
FFF0-FFFF | 特殊 (Specials) |
看起来好像很美好,问题还是存在的。计算机怎么知道几个字节表示一个字符呢?(注意字符和字节的概念啊),还有啊,ASCII就一个字节,你弄到UNICODE来表示却要两个字节,多浪费啊,至少欧美这种英文只用ASCII的国家不喜欢这套东西吧。
UTF-8编码规则:如果只有一个字节则其最高二进制位为0;如果是多字节,其第一个字节从最高位开始,连续的二进制位值为1的个数决定了其编码的字节数,其余各字节均以10开头。
UTF-8转换表表示如下
8. 后话
就这样讲完了?No!
Codepage是啥?
网页乱码是怎么回事?
什么是UTF-8的BOM?
UCS-2的Bid End和Little End?
UTF-8、UTF-16、UTF-32,GBK,Big5等等怎么转换?
iconv玩过吗?
什么CJK统一汉字?
汉字进入信息时代后发展前景怎样?
……
篇幅太长了,统统下回分解!