搞清常用编码特性是解决字符集编码问题的基础。字符集编码的识别与转换、分析各种乱码产生的原因、编程操作各种编码字符串(例如字符数计算、截断处理)等都需要弄清楚编码的特性。

了解一种字符集编码主要是要了解该编码的编码范围,编码对应的字符集(都包含哪些字符),和其他字符集编码之间的关系等。

ASCII

ASCII码是7位编码,编码范围是0x00-0x7F。ASCII字符集包括英文字母、阿拉伯数字和标点符号等字符。其中0x00-0x20和0x7F共33个控制字符。

只支持ASCII码的系统会忽略每个字节的最高位,只认为低7位是有效位。HZ字符编码就是早期为了在只支持7位ASCII系统中传输中文而设计的编码。早期很多邮件系统也只支持ASCII编码,为了传输中文邮件必须使用BASE64或者其他编码方式。

GB2312

GB2312是基于区位码设计的,区位码把编码表分为94个区,每个区对应94个位,每个字符的区号和位号组合起来就是该汉字的区位码。区位码一般 用10进制数来表示,如1601就表示16区1位,对应的字符是“啊”。在区位码的区号和位号上分别加上0xA0就得到了GB2312编码。

区位码中01-09区是符号、数字区,16-87区是汉字区,10-15和88-94是未定义的空白区。它将收录的汉字分成两级:第一级是常用汉字 计3755个,置于16-55区,按汉语拼音字母/笔形顺序排列;第二级汉字是次常用汉字计3008个,置于56-87区,按部首/笔画顺序排列。一级汉 字是按照拼音排序的,这个就可以得到某个拼音在一级汉字区位中的范围,很多根据汉字可以得到拼音的程序就是根据这个原理编写的。

GB2312字符集中除常用简体汉字字符外还包括希腊字母、日文平假名及片假名字母、俄语西里尔字母等字符,未收录繁体中文汉字和一些生僻字。可以用繁体汉字测试某些系统是不是只支持GB2312编码。

GB2312的编码范围是0xA1A1-0x7E7E,去掉未定义的区域之后可以理解为实际编码范围是0xA1A1-0xF7FE。

EUC-CN可以理解为GB2312的别名,和GB2312完全相同。

区位码更应该认为是字符集的定义,定义了所收录的字符和字符位置,而GB2312及EUC-CN是实际计算机环境中支持这 种字符集的编码。HZ和ISO-2022-CN是对应区位码字符集的另外两种编码,都是用7位编码空间来支持汉字。区位码和GB2312编码的关系有点像 Unicode和UTF-8。

GBK

GBK编码是GB2312编码的超集,向下完全兼容GB2312,同时GBK收录了Unicode基本多文种平面中的所有CJK汉字。同 GB2312一样,GBK也支持希腊字母、日文假名字母、俄语字母等字符,但不支持韩语中的表音字符(非汉字字符)。GBK还收录了GB2312不包含的 汉字部首符号、竖排标点符号等字符。

GBK的整体编码范围是为0x8140-0xFEFE,不包括低字节是0×7F的组合。高字节范围是0×81-0xFE,低字节范围是0x40-7E和0x80-0xFE。

低字节是0x40-0x7E的GBK字符有一定特殊性,因为这些字符占用了ASCII码的位置,这样会给一些系统带来麻烦。

有些系统中用0x40-0x7E中的字符(如“|”)做特殊符号,在定位这些符号时又没有判断这些符号是不是属于某个 GBK字符的低字节,这样就会造成错误判断。在支持GB2312的环境下就不存在这个问题。需要注意的是支持GBK的环境中小于0x80的某个字节未必就 是ASCII符号;另外就是最好选用小于0×40的ASCII符号做一些特殊符号,这样就可以快速定位,且不用担心是某个汉字的另一半。Big5编码中也存在相应问题。

CP936和GBK的有些许差别,绝大多数情况下可以把CP936当作GBK的别名。

GB18030

GB18030编码向下兼容GBK和GB2312,兼容的含义是不仅字符兼容,而且相同字符的编码也相同。GB18030收录了所有Unicode3.1中的字符,包括中国少数民族字符,GBK不支持的韩文字符等等,也可以说是世界大多民族的文字符号都被收录在内。

GBK和GB2312都是双字节等宽编码,如果算上和ASCII兼容所支持的单字节,也可以理解为是单字节和双字节混合的变长编码。GB18030编码是变长编码,有单字节、双字节和四字节三种方式。

GB18030的单字节编码范围是0x00-0x7F,完全等同与ASCII;双字节编码的范围和GBK相同,高字节是0x81-0xFE,低字节 的编码范围是0x40-0x7E和0x80-FE;四字节编码中第一、三字节的编码范围是0x81-0xFE,二、四字节是0x30-0x39。

Windows中CP936代码页使用0x80来表示欧元符号,而在GB18030编码中没有使用0x80编码位,用其他位置来表示欧元符号。这可以理解为是GB18030向下兼容性上的一点小问题;也可以理解为0x80是CP936对GBK的扩展,而GB18030只是和GBK兼容良好。

常用字符集编码的概要特性(一)相关推荐

  1. java所使用的字符集是_Java常用字符集编码详解

    Java常用字符集编码详解 Web开发的时候经常会遇到一些字符编码的错误,如页面乱码等问题,所以有必要需对字符编码有所了解,以下是Ricki收集的一些资料(可能不是很全,但希望对你有所帮助) Java ...

  2. 计算机常用字符集编码

    1.ASCII. ASCII(American Standard Code for Information Interchange,美国信息互换标准代码) 是基于罗马字母表的一套电脑编码系统,它主要用 ...

  3. python 中文编码类型 gb2312 gb180_常用字符集编码详解:ASCII 、GB2312、GBK、GB18030、UTF-8、unicode...

    http://blog.csdn.net/zhoubl668/article/details/6914018 ASCII ASCII码是7位编码,编码范围是0x00-0x7F.ASCII字符集包括英文 ...

  4. 常用字符集及字符编码和Charset类

    计算机中储存的信息都是用二进制数表示的:而我们在屏幕上看到的英文.汉字等字符是二进制数转换之后的结果. 字符(Character) :是各种文字和符号的总称,包括各国家文字.标点符号.图形符号.数字等 ...

  5. 目前HTML常用的字符集编码方式,HTML知识点

    1. HTML 初识 HTML 指的是超文本标记语言 (Hyper Text Markup Language)是用来描述网页的一种语言. HTML 不是一种编程语言,而是一种标记语言 (markup ...

  6. 字符集编码(四):UTF

    在前面文章<字符集编码(中):Unicode>中我们聊了 Unicode 标准并提到其有三种实现形式:UTF-16.UTF-8 和 UTF-32,本篇我们就具体聊聊这三种 UTF 是怎么实 ...

  7. 字符集编码(三):Unicode

    前面<字符集编码(上):Unicode 之前>我们讲了在二十世纪九十年代 Unicode 出现之前各厂商和标准化组织为了应对不同语言文字的编码需求而设计了各种互不兼容的字符集编码标准,这使 ...

  8. 字符集编码详解【ASCII 、GB2312、GBK、GB18030、unicode、UTF-8】(转)

    ASCII字符集编码 ASCII码是7位编码,编码范围是0x00-0x7F.ASCII字符集包括英文字母.阿拉伯数字和标点符号等字符.其中0x00-0x20和0x7F共33个控制字符. 只支持ASCI ...

  9. JAVA字符流与字符集编码

    http://elf8848.iteye.com/blog/271742 问题: 当用JAVA字符流向硬盘写一个a.txt文件时,默认情况下a.txt 会使用什么字符集编码? 分析: "字符 ...

最新文章

  1. lists,tuples and sets of Python
  2. 四则运算 3.0 结对
  3. Mybatis解决实体类属性和表字段对应不上
  4. 人工智能一定要用python吗_学人工智能一定要学Python吗?
  5. 网站外链数量的变化可以从哪几点去理解
  6. MySQL之权限索引学习整理
  7. [机器学习]一个例子完美解释朴素贝叶斯分类器
  8. [pytorch、学习] - 5.8 网络中的网络(NiN)
  9. MIP 官方发布 v1稳定版本
  10. Oracle 多表查询
  11. Windows一键设置JAVA环境变量
  12. 5.5 设置UITableView单元格背景色 [原创iOS开发-Xcode教程]
  13. jibx进行xml数据绑定的binging.xml配置
  14. 楷书书法规则_楷书的结构法则
  15. 优品优男所谓“日有所思,夜有所梦”
  16. 超级计算机的配置,第一章 最新GPU并行计算超级计算机配置全集.pdf
  17. 搜一下导航完整程序源码+亲测可用
  18. 轮式机器人算法仿真的一些杂七杂八02
  19. NPC三电平嵌位型逆变器仿真 NPC逆变器输出为三电平,线电压为五电平,形状更接近于正弦,在同样的开关频率下
  20. 知乎热议程序员「35岁定律」,30岁转行学Python是否可行?

热门文章

  1. echarts is not defined解决方案
  2. 移动互联网时代:如何让姑娘在一分钟内爱上你?
  3. 戴尔服务器开机无显示器,戴尔液晶显示器开机无显示原因是电容问题?
  4. 交换机的vlan划分和VLAN Trunk技术
  5. TransmittableThreadLocal的简单使用 + 手写源码
  6. GRBL 软件:简单解释的基础知识
  7. 黑帽python第二版(Black Hat Python 2nd Edition)读书笔记 之 第五章 WEB黑客(3)暴力破解目录与文件位置
  8. 人工智能技术在电力系统的应用有哪些
  9. 开学季的文案集锦用什么便签软件写?
  10. PHP在线考试测试系统源码下载