Win32逆向学习之字符编码

本文深入探讨字符编码,从ASCII编码到扩展ASCII,再到GB2312编码及其问题,接着介绍Unicode编码及其存储实现UTF-16和UTF-8,最后讨论了字节顺序标识(BOM)在文件编码识别中的作用。
摘要由CSDN通过智能技术生成

字符编码

1、原始的ASCII编码

在这里插入图片描述

在计算机里面真正存储的是字符对应的编码,而不是字符本身。

ASCII码只用了一个字节来表示字符,表示的比较少,最多表示255个字符,范围是0x00-0xFF。但实际上原始的ASCII码只是使用了0x00-0x7F中间的字符,0x80-0xFF中间的字节并没有使用。

2、ASCII码的拓展 以及GB2312或GB2312-80

2.1 产生的原因

在英语中,用128个符号编码便可以表示所有,但是用来表示其他语言,128个符号是不够的。后来有些国家利用字节中闲置的最高位编入新的符号,这样编码的范围就是0x00-0xFF,可以表示256个符号。这种编码称为ASCII码的扩展。

2.2 扩展ASCII编码

在这里插入图片描述

扩展ASCII编码的编码范围是 1000 0000 - 1111 1111 ,即0x8F-0xFF。加上ASCII编码一共可以表示256个字符。

但是汉语的字符有10万以上,256个字符显然不能满足汉语字符的表示,至少需要两个字节,而且还不能和ASCII编码冲突,所以,中国将ASCII码再进行扩展,便有了GB2312编码。

2.3 GB2312编码

GB2312 兼容标准 ASCII码,采用扩展 ASCII 码的编码空间进行编码,一个汉字占用两个字节,每个字节的最高位为 1。

例如“你好”的编码的GB2312编码的16进制是 E3 C4 C3 BA。“你”的编码是E3 C4 二进制就是 1110 0011 1100 0100,其中1110 0011就是一个扩展ASCII码,1100 0100也是一个扩展ASCII码。

2. 4 出现的问题

除了中国,其他国家也为了适应自己国家的字符对ASCII码进行扩展,相同的16位的1110 0011 1100 0100编码,在中国表示字符“你好”,但是到其他国家就会表示成其他符号,各个国家之间的编码并不统一,极易出现乱码现象,不能满足跨语言、跨平台进行文本转换、处理的需求。

3、UNICODE编码

3.1 Unicode编码

Unicode是一种编码方案,全世界所有文字都有唯一一个二进制来表示,也就是说每一个字符都有唯一一个二进制编码来表示,可以满足跨语言、跨平台进行文本转换、处理的要求。

Uni

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值