编码方式

 

ASCII(American Standard Code for Information Interchange,美国信息互换标准代码)是基于拉丁字母的一套电脑编码系统。它主要用于显示现代英语和其他西欧语言。它是现今最通用的单字节编码系统,并等同于国际标准ISO/IEC 646。

ASCII 码使用指定的7 位或8 位二进制数组合来表示128 或256 种可能的字符。标准ASCII 码也叫基础ASCII码,使用7 位二进制数来表示所有的大写和小写字母,数字0 到9、标点符号, 以及在美式英语中使用的特殊控制字符。其中:
   0~31及127(共33个)是控制字符或通信专用字符(其余为可显示字符),如控制符:LF(换行)、CR( 回车)、FF(换页)、DEL(删除)、BS(退格)、BEL(振铃)等;通信专用字符:SOH(文头)、EOT(文尾)、ACK(确认)等;ASCII值为8、9、10 和13 分别转换为退格、制表、换行和回车字符。它们并没有特定的图形显示,但会依不同的应用程序,而对文本显示有不同的影响。
  32~126(共95个)是字符(32sp是空格),其中48~57为0到9十个阿拉伯数字
  65~90为26个大写英文字母,97~122号为26个小写英文字母,其余为一些标点符号、运算符号等。
  同时还要注意,在标准ASCII中,其最高位(b7)用作 奇偶校验位。所谓奇偶校验,是指在代码传送过程中用来检验是否出现错误的一种方法,一般分奇校验和偶校验两种。奇校验规定:正确的代码一个字节中1的个数必须是奇数,若非奇数,则在最高位b7添1;偶校验规定:正确的代码一个字节中1的个数必须是偶数,若非偶数,则在最高位b7添1。

  后128个称为扩展ASCII码,目前许多基于x86的系统都支持使用扩展(或“高”)ASCII。扩展ASCII 码允许将每个字符的第8 位用于确定附加的128 个特殊符号字符、外来语字母和图形符号。

扩展ASCII 字符是从128 到255(0x7f-0xff)的字符。

汉字编码  0-127 是 7位ASCII 码的范围,是国际标准。
  至于汉字,不同的字符集用的ascii 码的范围也不一样,常用的汉字字符集有GB2312-80,GBK,
  Big5,unicode 等。下面我重点说一说最常用的GB_2312 的字符集。
  GB_2312 字符集是目前最常用的汉字编码标准,windows 95/98/2000 中使用的 GBK字符集 就包含了GB2312,或者说和GB2312 兼容,GB_2312 字符集包含了 6763个的 简体汉字,和682 个标准中文符号。在这个标准中,每个汉字用2个字节来表示,每个字节的ascii码为 161-254 (16 进制A1 - FE),第一个字节 对应于 区码的1-94 区,第二个字节 对应于位码的1-94 位。
  161-254 其实很好记忆,大家知道英文字符中,可打印的字符范围为33-126。将 这对 数加上

  128(或者说最高位置1),就得到汉字使用的字符的范围。

Windows系统自带的记事本,在存储的时候可以选择4种编码方式,它们分别是:ANSI、Unicode、Unicode big endian、UTF-8,那么他们之间有什么区别呢?

一、ANSI
注意这里的ANSI编码,并非ASCII编码,虽然它确实有点迷惑人。在简体中文系统下,ANSI编码代表的就是GB2312编码。对于一个ANSI文本,英文部分使用的就是ASCII编码,而中文部分使用的就是GB2312编码。
二、Unicode
Unicode是用2个字节表示全世界的符号,只要选择Unicode编码,所有的字符都会使用2个字节进行存储,英文字符也不例外,说到Unicode编码,一般默认指的是UTF-16/UCS-2, little endian这种实现。
三、Unicode big endian
Unicode big endian也是Unicode,只不过是另一种实现:UTF-16/UCS-2, big endian。
四、UTF-8
UTF-8也是一种Unicode实现,因为Unicode是对全世界的所有符号进行了独立的编码,也就是独一无二的,这个编码与实现无关,UTF-8只是在这种独立的编码上面进行了重新的编码,它是一种变长的格式,根据不同的编码,字符可能占用1~4个字节。比如ASCII字符占用1个字节,而汉字一般都占用3个字节。
下面让我们做个实验,假如我们使用这样一段文本,既包含英文字符又包含汉字,将其以上面的三种编码格式分别保存为1.txt、2.txt、3.txt、4.txt四个文件,然后使用UltraEdit以16进制形式打开,做一个比较对照。文本如下:
然后分别如上保存为4个文件。首先要对UltraEdit做一个设置,因为UltraEdit自动会对UTF-8文件识别,并且在读取的过程中将其转换为UTF-16/UCS-2, little endian,如果不做设置我们就无法真正的看到UTF-8文件了。设置如下,选择菜单栏的『高级』选项,进入『配置...』,跳出如下设置窗口:
就在常规标签页里面,我们将“自动检测UTF-8格式文件”前面的选中去掉,确认即可,这样UltraEdit就不会默认转换UTF-8文件了。
现在我们分别将4个文件用16进制形式打开。
1.txt(ANSI):
英文1个字节,汉字2个字节GB2312编码。
2.txt(Unicode):
我们看到Unicode是有前导符FF FE(位由低到高)的,每个字符都占有2个字节。
3.txt(Unicode big endian):
这种编码方式只是将高字节和低字节颠倒了一个位置,其它不变,每个字符仍然是占用2个字节,前导符为FE FF(位由低到高)。
4.txt(UTF-8):
可以看到UTF-8是使用的变长格式,英文字符占用的1个字节,例子里面的汉字都是占用3个字节,平均下来反而比上面两个要短点,UTF-8使用的前导符是EF BB BF(位由低到高)。
大家心里面些许应该有点清楚了吧。


 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值