1.ASC II

ASCII(American Standard Code for Information Interchange,美国标准信息交换代码)是基于拉丁字母的一套电脑编码系统,主要用于显示现代英语和其他西欧语言。它是现今最通用的单字节编码系统。ASCII 码使用指定的7 位或8 位二进制数组合来表示128 或256 种可能的字符。后128个称为扩展ASCII码。许多基于x86的系统都支持使用扩展(或“高”)ASCII。扩展ASCII 码允许将每个字符的第8 位用于确定附加的128 个特殊符号字符、外来语字母和图形符号。

2.ANSI

ANSI是一种字符代码,为使计算机支持更多语言,通常使用 0x80~0xFF 范围的 2 个字节来表示 1 个字符。在简体中文Windows操作系统中,ANSI 编码代表 GBK 编码;在繁体中文Windows操作系统中,ANSI编码代表Big5。

3.GB2312 GBK GB18030

GB2312

一个小于127的字符的意义与原来相同,但两个大于127的字符连在一起时,就表示一个汉字,前面的一个字节(称之为高字节)从0xA1用到0xF7,后面一个字节(低字节)从0xA1到0xFE。

GBK

两个字节表示一个汉字,英文占一个字节,即全角半角。不再要求低字节一定是127号之后的内码,只要第一个字节是大于127就固定表示这是一个汉字的开始,不管后面跟的是不是扩展字符集里的内容。结果扩展之后的编码方案被称为 GBK 标准,GBK 包括了 GB2312 的所有内容,同时又增加了近20000个新的汉字。

GB18030

GB18030 编码是一二四字节变长编码。GB 18030与GB 2312-1980完全兼容,与GBK基本兼容,支持GB 13000及Unicode的全部统一汉字,共收录汉字70244个。单字节,其值从0到0x7F,与 ASCII 编码兼容。双字节,第一个字节的值从0x81到0xFE,第二个字节的值从0x40到0xFE(不包括0x7F),与 GBK标准基本兼容。四字节,第一个字节的值从0x81到0xFE,第二个字节的值从0x30到0x39,第三个字节从0x81到0xFE,第四个字节从0x30到0x39。

4.Unicode

Unicode 是为了解决传统的字符编码方案的局限而产生的,它为每种语言中的每个字符设定了统一并且唯一的二进制编码,以满足跨语言、跨平台进行文本转换、处理的要求。

固定用两个字节来表示,其中英文高字节补0

5.UTF-8

UTF-8以字节为单位对Unicode进行编码,UTF-8是Unicode的实现方式之一。

UTF8就是每次8个位传输数据,而UTF16就是每次16个位,只不过为了传输时的可靠性,从UNICODE到UTF时并不是直接的对应,而是要过一些算法和规则来转换。

TF-8最大的一个特点,就是它是一种变长的编码方式。它可以使用1~4个字节表示一个符号,根据不同的符号而变化字节长度。

UTF-8的编码规则很简单,只有二条:
1)对于单字节的符号,字节的第一位设为0,后面7位为这个符号的unicode码。因此对于英语字母,UTF-8编码和ASCII码是相同的。
2)对于n字节的符号(n>1),第一个字节的前n位都设为1,第n+1位设为0,后面字节的前两位一律设为10。剩下的没有提及的二进制位,全部为这个符号的unicode码。
下表总结了编码规则,字母x表示可用编码的位。

Unicode编码(十六进制)   UTF-8 字节流(二进制)
00000000 - 0000007F 0xxxxxxx
00000080 - 000007FF 110xxxxx 10xxxxxx
00000800 - 0000FFFF 1110xxxx 10xxxxxx 10xxxxxx
00010000 - 001FFFFF 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx

UTF-8编码的最大长度是6个字节。从上表可以看出,6字节模板有31个x,即可以容纳31位二进制数字。Unicode的最大码位0x7FFFFFFF也只有31位。

“汉”字的Unicode编码是0x6C49。0x6C49在0x0800-0xFFFF之间,使用用3字节模板了:1110xxxx 10xxxxxx 10xxxxxx。将0x6C49写成二进制是:0110 1100 0100 1001, 用这个比特流依次代替模板中的x,得到:11100110 10110001 10001001,即E6 B1 89。

6.Little endian和Big endian

Unicode编码存储时,第一个字节在前,就是”大头方式“(Big endian),第二个字节在前就是”小头方式“(Little endian)。Unicode规范中定义,每一个文件的最前面分别加入一个表示编码顺序的字符,这个字符的名字叫做”零宽度非换行空格“(ZERO WIDTH NO-BREAK SPACE),用FEFF表示。这正好是两个字节,而且FF比FE大1。如果一个文本文件的头两个字节是FE FF,就表示该文件采用大头方式;如果头两个字节是FF FE,就表示该文件采用小头方式。

7.实例

新建一个文本文件,内容就是一个”汉“字,依次采用ANSI,Unicode,Unicode big endian 和 UTF-8编码方式保存。
然后,用文本编辑软件UltraEdit中的”十六进制功能“(Ctrl + H),观察该文件的内部编码方式。
1)ANSI:文件的编码就是两个字节“BA BA”,这正是“汉”的GB2312编码,这也暗示GB2312是采用大头方式存储的。
2)Unicode:编码是四个字节“FF FE 49 6C”,其中“FF FE”表明是小头方式存储,真正的编码是6C 49。
3)Unicode big endian:编码是四个字节“EF FF 6C 49”,其中“FE FF”表明是大头方式存储。
4)UTF-8:编码是六个字节“EF BB BF E6 B1 89”,前三个字节“E6 B1 89”表示这是UTF-8编码,后三个“E6 B1 89”就是“汉”的具体编码,它的存储顺序与编码顺序是一致的。

再在"汉"字后面加上一个英文字母a,a的ASC II码为61H,依次采用ANSI,Unicode,Unicode big endian 和 UTF-8编码方式保存。

1)ANSI:文件的编码就是两个字节“BA BA 61”,这正是“汉”的GB2312编码,这也暗示GB2312是采用大头方式存储的。
2)Unicode:编码是四个字节“FF FE 49 6C 61 00”,其中“FF FE”表明是小头方式存储,真正的编码是6C 49。
3)Unicode big endian:编码是四个字节“EF FF 6C 49 00 61”,其中“FE FF”表明是大头方式存储。
4)UTF-8:编码是六个字节“EF BB BF E6 B1 89 61”,前三个字节“E6 B1 89 61”表示这是UTF-8编码,UTF-8是一种变长的编码方式,所以c的ASC II码为61H,高字节不再补0。

再在‘a’的后面加上±,其扩展ASC II码为F1,依次采用ANSI,Unicode,Unicode big endian 和 UTF-8编码方式保存。

1)ANSI:文件的编码就是两个字节“BA BA 61 A1 C0”,这正是“汉”的GB2312编码,这也暗示GB2312是采用大头方式存储的。
2)Unicode:编码是四个字节“FF FE 49 6C 61 00 B1 00”,其中“FF FE”表明是小头方式存储.
3)Unicode big endian:编码是四个字节“EF FF 6C 49 00 61 00 B1”,其中“FE FF”表明是大头方式存储。
4)UTF-8:编码是六个字节“EF BB BF E6 B1 89 61 C2 B1”,前三个字节“E6 B1 89 61”表示这是UTF-8编码.

所以,根据结果来看,GBK Unicode UTF-8不再兼容扩展ASC II码,另根据其Unicode编码为’00 B1‘ 即:‘1011 0001’

将其转化为UTF-8,根据其属于

00000080 - 000007FF 110xxxxx 10xxxxxx 故将其自右向左一次填满,不足补0,即为‘1100 0010 1011 0001’转化为16进制就是:‘C2 B1‘就是它的UTF-8码

参考:http://blog.csdn.net/lvxiangan/article/details/8151670

计算机语言的巴别塔——ANSI Unicode编码相关推荐

  1. 字符编码简介 ANSI Unicode Unicode big endian UTF-8

    1. ASCII码 我们知道,在计算机内部,所有的信息最终都表示为一个二进制的字符串.每一个二进制位(bit)有0和 1两种状态,因此八个二进制位就可以组合出256种状态,这被称为一个字节(byte) ...

  2. 字符编码 ansi unicode utf-8 区别

    简介 为使计算机支持更多语言,通常使用 0x80~0xFFFF 范围的 2 个 字节来表示 1 个字符.比如:汉字 '中' 在 ANSI编码 中文操作系统中,使用 [0xD6,0xD0] 这两个字节存 ...

  3. [转]字符编码,ansi, unicode,utf-8, utf-16

    Unicode(Universal Multiple-Octet Coded Character Set): 目前最流行和最有前途的字符编码规范,因为它解决了不同语言编码的冲突. Uicode由来: ...

  4. Ansi与Unicode编码

    视频教程: Ansi与Unicode编码 大家在编程时经常遇到的数据类型: ● Ansi: char   代表一个字符  (CHAR) char *  代表一个字符串指针   (PCHAR    PS ...

  5. Ansi,UTF8,Unicode编码

    1.三种编码的回顾 Ansi字符串我们最熟悉,英文占一个字节,汉字2个字节,以一个/0结尾,常用于txt文本文件.  Unicode字符串,每个字符(汉字.英文字母)都占2个字节:在VC++的世界里, ...

  6. mysql ansi unicode_ANSI与Unicode编码

    编码 一 .ANSI 编程语言就是符号.单个符号的不同状态可以代表不同信息,多种符号不同状态的组合就构成了我们的语言世界.计算机起源于美国,系统中使用的符号都是以英语字母为基础构造的.这就造成了使用英 ...

  7. 字符串编码(ASCII, GBK, ANSI, Unicode(‘\u‘), UTF-8编码)

    字符串编码的发展 1.首先,计算机只能处理数字,文本转换为数字才能处理.计算机中8个bit作为一个字节,所以一个字节能表示最大的数字就是255 因为计算机是美国人发明的,所以一个字节可以表示所有字符了 ...

  8. 字节码:ASCII编码:单字节编码,ANSI编码:多字节编码,UNICODE编码:宽字节编码

    字符字节与编码 字符是人们常用的一些记号,比如"1", "汉", "お","℃"等等,包括各种语系的语言和一些符号都可以 ...

  9. 字符编码之Ascll编码,ANSI编码,Unicode编码,UTF-8编码 ,BOM

    从大一上C语言就开始认识了Ascll编码,ascll码也算是我们最早所接触的编码 [1]Ascll码 Ascll码由三部分组成: 第一部分从00H到1FH共32个,一般用来通信或作为开工至之用,有的可 ...

最新文章

  1. 激光雷达模块支持提高高速公路速度
  2. ***警告即将发起重大*** 谁会是下一个目标?
  3. springcloud学之前需要掌握什么_学国画之前我们需要准备什么?
  4. python画椭圆-python opencv圆、椭圆与任意多边形的绘制实例详解
  5. STM32G071RB CubeMX ADC TIM DMA
  6. javascript中的this讲解
  7. iOS的消息机制和消息转发
  8. 微信小程序怎么扩展服务器,小程序服务器可扩展的配置方案
  9. apache配置文件详解
  10. 2个表 遍历 组合_7.2 图的存储结构(2)
  11. visio2016下载以及永久激活
  12. Excel 取消分页符
  13. Python爬取Google图片(2021.11.21编写)
  14. CentOS安装配置freeIPA
  15. 点击或长按复制打开微信H5落地页如何制作?
  16. Ubuntu18.04 ROS Melodic版本安装gazebo_ros_pkgs包
  17. 关于语音会议自动转文字系统的想法
  18. VMware ESXI centos7虚机搭建详解(避坑必看)
  19. 牛客网NC77-20.7.23-dp(动态规划?)
  20. 听《武志红的心理课之潜意识就是命运》有感 命运,这个东西信者有,不信者无。我很赞同武老师的观点,一个热的外在命运和我们的内在想象,是镜像关系。这不禁让我想起了小时候的一个故事:一群青蛙比赛爬山,很多人

热门文章

  1. 【HTML】表格标签,map,iframe,h5标签,语义化,标签分类,role,aria-*
  2. dnf用计算机算比例,DNF比例计算查询
  3. python中init外面的属性_Python mock属性在\uyu init中定义和设置__
  4. 5 6c语言上机作业答案,C语言第五次上机作业参考答案
  5. AppStore打开后空白的解决办法
  6. C++背包问题——完全背包必须装满的方案数
  7. R语言ggplot绘制地图-报错汇总(一)
  8. 一条Sql的执行过程
  9. Python 分别获取日期中的年月日时分秒
  10. 3.7 Docker最新入门教程-Docker入门-多容器应用