字符编码详解(ASCII,Unicode,ANSI,UTF-16,UTF-8)

Ascii(256个) 编码表 完整码表 ASCII编码 ASCII表 ASCII码 二进制 十进制 八进制 十六进制 Ascii(256个) 编码表 完整码表 ASCII编码 ASCII表 ASCII码 阅读详情

ASCII

ASCII(American Standard Code for Information Interchange)编码起源于电报码,1960年10月6日,美国标准协会(ANSI)的X3.2小组委员会举行第一次会议,开始了关于ASCII标准制定。第一版ASCII标准于1963年发布,在1967年经历了重大修改,在1986年期间经历了最近一次更新。ASCII开始基于英语字母表,将指定的128个字符编码成7位的二进制整数。其中95个编码字符是可以打印的,包括数字0-9,小写字母a-z,大写字母A-Z,还有一些标点符号。


Unicode

Unicode是一种计算机行业统一编码标准,其起源是为了解决各国编码之间的不兼容问题,创始人之一Joe Becker说为其取名'Unicode'是为了表明这是一种唯一的,统一的,通用的编码。Unicode最初使用16位二进制来表示所有语言中的字符,因为当时所有报纸和杂志的现代文字总和小于214 = 16,384。1991年3月,Unicode联盟在加利福尼亚成立,同年10月,第一版Unicode标准发布。1996年发布Unicode 2.0,加入了代理字符机制(Surrogate Characters Mechanism),将码域增加到了100多万。2000年以后,Unicode基本保持一年一更的节奏,截止到2017年最新发布的Unicode 10.0,已经拥有136,755个字符。


Unicode的代理字符机制是怎么实现的?

Unicode 2.0 将码域分为两部分,第一部分为“基础码域”,范围(U+0000 - U+FFFF)。第二部分为“扩展码域”,范围(U+10000 - U+10FFFF)。由于Unicode依然保持基于16位二进制编码,为了实现“扩展码域”,采取的做法是从“基础码域”中预留两段代码域,如下面表格所示:

Code point areaNameTotal
U+D800 – U+DBFFHigh Surrogates0x400
U+DC00 – U+DFFFLow Surrogates0x400

一个高位代理码后面接一个低位代理码,就构成了一个扩展码点(supplementary code point)。煮个栗子:

U+D800 U+DC00 = U+10000

U+D801 U+DC00 = U+10001

......

U+DBFF U+DFFF = U+10FFFF

所以扩展码域总共能够编码0x100000=‭1048576‬个字符(0x400 * 0x400)


Unicode码域总共分成了多少块?

17块,详情见下表:



Unicode编码方法

Unicode定义了两种类型的编码方法:Unicode Transformation Format (UTF) 和 Universal Coded Character Set (UCS) 。UTF编码有UTF-8、UTF-16、UTF-32,UTF后面的数字代表每个代码值的位数。UCS编码有UCS-2,UCS-4,UCS后面的数字代码每个代码值字节数。UTF-8、UTF-16是最常用的两种编码,UCS-2是UTF-16的子集,已经被淘汰了,UCS-4和UTF-32在功能上等同。

UTF-8:可变长编码,兼容ASCII。

UTF-16:可变长编码。

UTF-32:定长编码。



UTF-16编码详解

历史:
UTF-16(16-bit Unicode Transformation Format),是一种可变长编码,用1或2个16位(2字节)代码单元进行编码。UTF-16是从早期的16位定长编码UCS-2发展而来,由于16位最多只能编码65,536个字符,随着需要使用的字符越来越多,这明显不够用。于是IEEE(Institute of Electrical and Electronics Engineers,电气与电子工程师协会)提出了UCS-4方案,用4字节编码一个字符。Unicode联盟觉得这个方案扯淡,因为这会浪费很多磁盘空间,而且很多厂商已经投入大量资源基于2字节进行技术开发。最终UTF-16作为一个折中方案在Unicode 2.0标准中发布。

编码方式:
U+0000-U+D7FF 和 U+E000-U+FFFF (BMP)
这段范围好说,一个16位代码单元(2字节)对应一个码点,总共编码妥妥的。

U+10000-U+10FFFF (SP)
0x10FFFF-0x10000,所以还剩下0xFFFFF个码点,转为二进制是11111111111111111111,不用数了,20位
高10位(能表示的数字范围:0x0000-0x03FF)加上0xD800作为第一个16位代码单元,范围是0xD800-0xDBFF
低10位(能表示的数字范围:0x0000-0x03FF)加上0xDC00作为第二个16位代码单元,范围是0xDC00-0xDFFF

上面的文字不好理解?看图表:



举个栗子:

Unicode字符:U+10437()

先减去0x10000,结果为0x0437
高位:0x0437除以0x400等于0x0001,0x0001 + 0xD800 = 0xD801
低位:0x0437除以0x400后余0x0037,0x0037 + 0xDC00 = 0xDC37
所以UTF-16编码为:0xD801DC37
解码的话反过来就是了。


字节序方案:

UTF-16的一个代码单元是2字节,由于大多数通信协议和存储协议都是以字节单位,于是在存储UTF-16序列的时候就需要选择字节序。为了便于识别字节序,UTF-16引入了BOM(Byte Order Mark),插入在第一个实际代码值之前。U+FEFF(零宽度不间断空格,啥也不是)表示大端,U+FFFE(非字符)表示小端。UTF-16规定如果缺少BOM头,应假设字节序为大端,但事实上,因为windows默认使用小端,所以很多软件也默认使用小端,平台的力量还是大。

以上面的字符为例(U+10437,UTF-16:0xD801DC37):

小端:


大端:




UTF-8编码详解

UTF-8是一种可变长编码,使用1-4字节(8位)编码所有Unidoce字符。与ASCII兼容,Unicode前128个字符与ASCII是一一对应的,UTF-8使用一字节对其进行编码,并且在二进制值上与ASCII一样。UTF-8已经成为了万维网上的主导编码,截止到2018年5月,91.5%网页使用UTF-8编码。IMC推荐所有的e-mail程序使用UTF-8展示和创建邮件,W3C推荐将UTF-8作为XML和HTML的默认编码。


编码方式:


举个栗子:
1.Unicode字符‘€’,U+20AC
2.根据上表可知所在区间为 U+0800-U+FFFF,所以需要3字节编码
3.0x02AC二进制为 0010 0000 1010 1100
4.对照上表,从右往左,用3中的二进制逐一替换表格的x
5.结果为1110 0010 1000 0010 1010 1100,十六进制:0xE282AC


字节序:

UTF-8编码的最小代码值单元是1字节,所以不存在字节序问题。但是很多Windows程序(Windows记事本)会在以UTF-8保持的文件最前加上 0xEF, 0xBB, 0xBF,这个通常称为BOM。


优势劣势:
优势:兼容ASCII;字符边界容易识别;小于U+0080的编码只需一个字节;每个编码单元以1字节为单位,不用考虑字节序问题。
劣势:编码U+0800-U+FFFF需要3字节


ANSI

ANSI编码没有明确定义,但是通常被用来指代Windows代码页(Windows code page),在英文系统上通常指Windows-1252代码页,在简体中文系统通常指Windows-936(在不同的windows系统上,可能指代不同的代码页)。事实上,“ANSI编码”这个名字是个错误用法,应为ANSI从来没有发表过这样的标准。


Windows-1252:
别名CP-1252,用一个字节,总共编码256个字符,在英文和一些西方的Windows系统上作为默认编码。

Windows-936:
别名CP-936,是Windows系统为简体中文设计的编码,最初只覆盖GB2312中的字符,但是随着Window95的发布,被扩展到覆盖大部分的GBK。

编码方案:
第一部分:使用1个字节编码,0x00-0x80和0xff。总共编码130个字符,前128个字符和ASCII兼容。

第二部分:使用2个字节编码,高字节加lead byte(首字节),低字节叫trail byte(尾字节),lead byte范围:0x81-0xfe(125),trail byte范围:0x40-0xfe(190),总共编码字符:23750


引用:
https://en.wikipedia.org/wiki/ASCII
https://en.wikipedia.org/wiki/Unicode
http://hauchee.blogspot.com/2015/05/surrogate-characters-mechanism.html
https://en.wikipedia.org/wiki/UTF-16
https://en.wikipedia.org/wiki/UTF-8
https://en.wikipedia.org/wiki/ANSI_(disambiguation)
https://en.wikipedia.org/wiki/Windows-1252
https://en.wikipedia.org/wiki/Code_page_936_(Microsoft_Windows)
https://unicode.org/Public/MAPPINGS/VENDORS/MICSFT/WindowsBestFit/

字符编码之ASCII、GB2312、GBK、GB18030、UNICODE、UTF-8、UTF-16、UTF-32、ANSI初步理解 在理解字符编码之前,先做好准备工作: 工具:UltraEdit,windows自带文本编辑器。 约定:GBK代表GB2312,GBK,GB18030 首先在UltraEdit输入一串文字分别保存为不同编码格式查看其16进制。 输入内容:12Aa练习 结果:如 图1 图1 编码格式 GBK ANSI UNICODE 16进制值 31 32 41 61 C... 阅读详情

相关推荐

计算机系列:字符集与字符编码(理解ASCII、ANSI、UTF-8、Unicode,解决各种乱码问题)

字符集与字符编码(理解ASCII、ANSI、UTF-8、Unicode,解决各种乱码问题)

weixin_54626591的博客 2447

unicode详解

unicode的中文翻译为统一码,也叫万国码、单一码,由统一码联盟开发,是计算机科学领域里的一项业界标准。简单的来看,unicode就是一个数字,每一个数字对应一个字符的编码,这个字符囊括了整个世界使用的全部语言和符号的字符,所以,从根本上来说,unicode就是一个映射表,一个从数字到文字的映射。

b1049112625的博客 2万+

全面掌握字符编码转换:UTF-16、UTF-8、ASCII与Unicode互换

Unicode字符集是一个旨在为每一个字符提供一个独一无二的编码的国际标准。Unicode的诞生解决了之前字符编码体系不统一,无法涵盖世界上所有语言字符的问题。其基本原则包括:普遍性:Unicode覆盖了世界上现有的所有文字系统,包括一些已经不再使用的古老文字。唯一性:每个字符都有一个唯一的码点,避免了字符表示上的歧义。不变性:一旦一个字符被赋予一个码点,它将永远保持这个码点,不会因为技术和规范的更新而变化。可访问性。

weixin_33363025的博客 2075

ASCII、Unicode、GBK、UTF-8编码

同时“路”在Unicode字符集中的位置是“\u8def”(python中的Unicode类型),因此可以通过“\u8def”在Unicode字符集中找到“路”对应的编码为“4237”,对应的二进制为:“0100 0010 0011 0111”,由于gbk的俩个字节的高字节是为了区分中文和ASCII,所以将“1100 0010 1011 0111”高字节的“1”去掉后,就对应Unicode字符集中的0100 0010 0011 0111”重复一遍,这里的关系是,UTF-8是Unicode的实现方式之一。

qq_57250692的博客 2万+

utf-16编码表

有61726个字符,csv格式,做编码的基础数据 0000, 0001,Ā 0002,Ȁ 0003,̀ 0004,Ѐ 0005,Ԁ 0006,؀ 0007,܀ 0008,ࠀ 0009,ऀ 000C,ఀ 000D,ഀ 000F,ༀ 0010,က 0011,ᄀ 0012,ሀ

UTF-16汉字编码表

UTF-16汉字编码表,txt格式的

字符编码方案:Unicode

Unicode(统一码、万国码、单一码)是一种在计算机上广泛使用的字符编码,旨在解决传统字符编码方案的局限,为每种语言中的每个字符设定了统一且唯一的二进制编码,以满足跨语言、跨平台进行文本转换和处理的需求。

在那一刻,我们或许会发现自己站在了时间的另一岸,以更加成熟和宽广的胸怀,去拥抱那份隔代相传的深情。 7968

汇编语言与接口技术(第4版)清华大学出版社 第2章 80*86微处理器 课后题答案

汇编语言与接口技术(第4版)清华大学出版社 第2章 80*86微处理器 课后题答案

m0_51658788的博客 3606

【字符编码详解】ASCII、GB2312、GBK、UTF-8、UTF-16编码与Unicode字符集

在计算机世界中,只有0、1两种数字,不论是英文、中文还是数字,在计算机中都是以01的形式存储的。因此,要想把文字存储到计算机上,就要规定特定的01序列来表示文字。编码就是规定特定的01序列来表示文字的过程,编码表示了字符在计算机中的存储形式。

仅以此博客记录日常学习工作中所思所得,水平有限,难登大雅,万望海涵。 1万+

【调试记录】GT ip跑aurora 64b66b协议

如果不用,会出现这种情况:自回环测试,数据收发ok.一旦和对方通信,对方接收的就是一堆乱码,因为GT链路发送数据不能是全1或全0,或者长时间的1或0.否则线路容易受到干扰,毕竟线速率10多G,用了加扰和解扰,就可以提高抗干扰能力。64B66B编码,数据输入是64bit,输出是66bit,所以这之间存在着2bit的带宽差,Gearbox 就是用来解决这种差异的,实现方式是:将66bit数据拿出来2bit先存入Gearbox,然后输出64bit.发送同步码或控制数据时,配置成2.2.4 加扰和解扰!

weixin_41246509的博客 1601

RPCA模型及GoDec算法

一、基础知识 在线性代数中,秩的物理意义是矩阵中最大的不相关的向量个数,因此秩可以用来度量相关性;而在图像处理中,秩就可以理解为图像中所包含的信息的丰富程度。图片中比较突兀的成分,会增加图像矩阵的秩,一幅清晰的自然图像其数据矩阵往往是低秩或者近似低秩的,这是因为其中的图像信息有很大的相关性,但如果图像中引入噪声,那么存在随机幅值任意大但是分布稀疏的误差破坏了原有数据的低秩性。 低秩矩阵:如果AAA是一个m×nm×nm×n的矩阵,rank(A)rank(A)rank(A)是矩阵AAA的秩,如果rank(A)

小席的学习日志 7687

Ansi,UTF8,Unicode,ASCII编码的区别

近日需要不同的编码,关于上述编码,一直迷迷糊糊,查了些资料,总算大致了解了,下面全是从网上搜来的:1.  ASCII和Ansi编码    字符内码(charcter code)指的是用来代表字符的内码.读者在输入和存储文档时都要使用内码,内码分为     单字节内码 -- Single-Byte character sets (SBCS),可以支持256个字符编码.     双字节内码 --

xiongxiao的专栏 8万+

机器学习模型——非线性回归

升维是一种常用的处理非线性问题的方法,它通过将原始数据从低维空间映射到高维空间来增强模型的表达能力。我们可以看出,二维数据用一维直线很难去很好的拟合。升维里的degree设置的不易过大,否则容易造成维度灾难。升维后,拟合的线与原数据比较符合。将非线性问题转换为线性问题。

qq_60688380的博客 1421

【字符编码】详解ASCII、GB2312、GBK、Unicode、UTF-8、UTF-16、UTF-32

相信大家都遇到过打开一个文本文件然后出现乱码的情况,经典的"锟斤拷"乱码(bushi),如下:没在深夜见过"锟斤拷"的人,不足以语人生...好了回归正题,乱码到底是怎么来的呢?知名乱码"锟斤拷"又为何如此常见?不着急,要理解乱码,首先需要知道计算是如何存储为文字的:学过计算机的都知道,计算机只能存储0、1这两个二进制数,无论是文本文件里的数字、字母、汉字标点符号控制字符emoji😈👴等都需要用某种方式转换成二进制数字进行存储,需要的时候再读出来。

m0_55908255的博客 1840

【2023】Java利用modbus4j实现工业设备Modbus TCP数据采集与解析

本文详细介绍了在2023年使用Java和modbus4j库实现工业设备Modbus TCP数据采集与解析的完整实践。内容涵盖开发环境搭建、TCP连接建立、开关量与模拟量数据的读取与解析、批量读取性能优化、控制指令写入以及常见错误排查指南,为开发者构建稳定高效的工业物联网数据采集系统提供全面指导。

rose2的博客 723

多标签学习模型(一):Multi Label Knn

1.什么是多标签分类问题 2.传统的KNN算法 3.为什么传统的KNN算法不能够处理多标签问题 4.ML KNN的推导 5.ML KNN是如何解决多标签问题的 6.总结

weixin_42892235的博客 2605

一文搞懂字符编码的进化【ASCII、ANSI、Unicode、UTF-16、UTF-8、GB2312 、wchar_t】

美国人先发明了计算机,所以享有先定义字符编码的权利,ASCII码(单字节编码)在这个背景下产生了。 因为计算机的流行,使得非英语母语的国家需要自己国家语言的字符编码,于是ASNI码(多字节编码)产生了。 之后,随着时代的发展。ASNI码越来越多,人们意识到需要一个东西对其加以区分,于是CodePage(代码页)出现了。 再之后,随着全球化的流行,人们不满足只显示自己国家语言文字的要求。比如年轻人追求潮流想打个韩文[撒浪嘿]都打不出来,因为两种以上的ASNI码不能同时显示,所以又引入了Unicode来解决。

x2528238270的博客 3556

Ardupilot无人船(车)mavros自主控制

rover 4.4。

超维空间科技的博客 3229

字符编码(ASCII、GBK、UTF-8、ANSI)详解

目录一、ASCII 码二、GB2312、GBK、GB18030、Big5三、Unicode四、ANSI 一、ASCII 码 ASCII (American Standard Code for Information Interchange) - 美国信息交换标准代码 由于计算机最初只支持英文,最先出现的字符编码:ASCII 码。 ASCII 码采用 1 个字节编码,共定义了128个字符。 二、GB2312、GBK、GB18030、Big5 随着计算机的不断发展,支持简体中文的字符集包括:GB2312 、G

devilzcl的博客 4868

要理解成本中心与利润中心的根本区别与适用场景,需从 “责任范围、考核核心、管理目标” 三个核心维度切入,同时明确二者在企业管理体系中的联动关系

摘要: 成本中心与利润核心区别在于责任范围、考核目标和管理权限。成本中心仅对成本负责(如生产、行政部门),考核成本控制能力;利润中心需同时管控成本与收入(如独立产品线、区域分公司),以利润为核心指标。选择标准取决于单元是否拥有收入决策权:无收入权的支持/执行部门设为成本中心,能独立经营、核算盈亏的单元设为利润中心。二者协同运作,成本中心为利润中心提供基础支持,利润中心的需求动态影响成本中心资源配置,共同实现企业整体目标。划分本质是确保考核指标与责任范围匹配,避免管理失效。

金牌架构师 657

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

字符编码ANSI和ASCII区别、Unicode和UTF-8区别

今天看了一个说法,说是入坑windows程序开发,必先掌握文字的编码和字符集知识。本博客就整理下信息存储和字符编码的相关知识。 一.位: 计算机存储信息的最小单位,称之为位(bit),音译比特,二进制的一个“0”或一个“1”叫一位。 二.字节 字节(Byte)是一种计量单位,表示数据量多少,它是计算机信息技术用于计量存储容量的一种计量单位,8个二进制位组成1个字节。在ASCII码中,一个标准

xiangxianghehe的博客 6万+

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

字符编码:Unicode、UTF-8、GBK

原文站点:https://senitco.github.io/2017/06/06/character-encoding/  简单总结各种字符集(Ascii、Unicode、GB2312)、编码(UTF8、GBK)以及不同编码之间的转换。 字符集(Charcater Set)与字符编码(Encoding)字符集(Charcater Set 或 Charset):是一个系统支持的所有抽象字符的集合,

Zachary_Co的博客 3693

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

ASCII, UNICODE,ANSI,UTF8之间的关系

GBK,又称GBK大字符集,简而言之就是将所有亚洲文字的双字节字符,包括简体中文,繁体中文,日语,韩语等,都使用一种格式编码,兼容所有平台的上的语言。的形式进行定义,该形式采用两个字节来存储一个字符,两个字节一共可以存储2^16=65536,65536个字符,可以涵盖大多数语言,也是常用的存储方式(这就是现在绝大多数系统采用16位长度宽wchar数组来对unicode字符串进行存储)。当字符流中,字节的最高位为0的时候,可以代表这个字节中存储了一个码点,后边剩余的7位存储这这个码点对应的码值。

yunxiaobaobei的博客 1076

UNICODE、UTF-8、UTF-16、ANSI的区别和联系

unicode与utf-8、utf-16、ansi的区别和联系

Allen Roson 1680

【字符编码】 简洁理解ANSI,UTF8,Unicode,ASCII编码的差别

后来,因为各国语言的增加,ASCII已经不能满足信息交流的须要,因此,为了能够表示其他国家的文字,各国在ASCII的基础上制定了自己的字符集,这些从ANSI标准派生的字符集被习惯的统称为ANSI字符集,它们正式的名称应该是MBCS(Multi-ByteChactacterSystem,即多字节字符系统)。软件在读取时,假设看到30H,知道它小于128就是标准ASCII,表示“0”,看到C1大于128就知道它后面有一个另外的编码,因此C1AC一同构成一个整个的编码,在GB-2312字符集中表示“连”。

教师中的射鸡师 1730

ASCII,ANSI,Unicode,UTF-8各种编码方法解析

1. 字符集与编码:1.1 字符集 使用哪些字符。也就是说哪些汉字,字母和符号会被收入标准中。所包含“字符”的集合就叫做“**字符集**”。 1.2 编码规定每个“字符”分别用一个字节还是多个字节存储,用哪些字节来存储,这个规定就叫做“**编码**”。 各个国家和地区在制定编码标准的时候,“字符的集合”和“编码”一般都是同时制定的。因此,平常我们所说的“字符集”,比如:ASCII,ANSI(GB23

鲲鹏望舒 1442
上一篇: CEF 实现全屏播放视频
下一篇: TGit 快速上手
CButtonST
博客等级 码龄16年 42粉丝 15原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值