Unicode 与 UTF-8 编码详解

ASCII码,Unicode,UTF-8,URL编码详解 前言 想必大家都知道计算机所识别的语言是二进制语言,也就是0和1的代码,任何字符最终都要被计算机所转换为0和1组成的代码。而在我们计算机领域呢,涉及到许许多多除二进制编码以外的编码。如ASCII码,Unicode,UTF-8,URLcode等。今天我们就来详细的学习一下这四种编码,也是我们平时接触最多的。 ASCII码 起初,计算机是由美国人发明出来的,所以老美们为了将自己的语言也就是英语转换成计算机所识别二进制语言,于是乎呢,就自己编写一套编码,也就是ASCII码。 在计算机种中,1 字节对应 8 位二进 阅读详情

基础概念

  • 解码:字节流 —> Unicode对象
  • 编码:Unicode对象 —> 字节流

在计算机内存中,统一使用Unicode编码,当需要保存到硬盘或者需要传输的时候,就转换为UTF-8编码。Unicode只是一个符号集,它只规定了符号的二进制代码,却没有规定这个二进制代码应该如何存储。UTF-8是Unicode的最常见的一种实现方式


Unicode 与 UTF-8

完整版请点链接:《字符编码详解》

UTF-8的编码规则很简单,只有二条:

对于单字节的符号,字节的第一位设为0,后面7位为这个符号的Unicode码。因此对于英语字母,UTF-8编码和ASCII码是相同的
对于n字节的符号(n>1),第一个字节的前n位都设为1,第n+1位设为0,后面字节的前两位一律设为10。剩下的没有提及的二进制位,全部为这个符号的Unicode码

Unicode符号范围(十六进制)UTF-8编码方式(二进制)
0000 0000 - 0000 007F0xxxxxxx
0000 0080 - 0000 07FF110xxxxx 10xxxxxx
0000 0800 - 0000 FFFF1110xxxx 10xxxxxx 10xxxxxx
0001 0000 - 0010 FFFF11110xxx 10xxxxxx 10xxxxxx 10xxxxxx

上表中第一列是十六进制。十六进制的两位相当于二进制的八位,即一个字节。上表中0000 007F是4个字节。

下面,还是以汉字“严”为例,演示如何实现UTF-8编码。

已知“严”的Unicode是4E25(0100 1110 0010 0101),根据上表,可以发现4E25处在第三行的范围内(0000 0800-0000 FFFF),因此“严”的UTF-8编码需要三个字节,即格式是“1110xxxx 10xxxxxx 10xxxxxx”。然后,从“严”的最后一个二进制位开始,依次从后向前填入格式中的x,多出的位补0。这样就得到了,“严”的UTF-8编码是“11100100 10111000 10100101”,转换成十六进制就是E4B8A5。

下面,举一个实例:

打开记事本Notepad.exe,新建一个文本文件,内容就是一个“严”字,依次采用ANSI,Unicode,Unicode big Endian 和 UTF-8编码方式保存。然后,用文本编辑软件UltraEdit的”十六进制功能“,观察该文件的内部编码方式。

  • ANSI
    文件的编码就是两个字节“D1 CF”,这正是“严”的GB2312编码,这也暗示GB2312是采用大头方式存储的
  • Unicode
    编码是四个字节“FF FE 25 4E”,其中“FF FE”表明是小头方式存储,真正的编码是4E25。
  • Unicode big Endian
    编码是四个字节“FE FF 4E 25”,其中“FE FF”表明是大头方式存储。
  • UTF-8
    编码是六个字节“EF BB BF E4 B8 A5”,前三个字节“EF BB BF”表示这是UTF-8编码,后三个“E4B8A5”就是“严”的具体编码,它的存储顺序与编码顺序是一致的

比如,汉字“严”的Unicode是十六进制数4E25,转换成二进制数足足有15位(100111000100101),也就是说这个符号的表示至少需要2个字节。表示其他更大的符号,可能需要3个字节或者4个字节,甚至更多。


Code Page

用对应的某个数字,Code Page Number,即Code Page中的标识符(Identifier),表示相应的字符编码。

而一般Code Page也常缩写为CP

比如,CP936表示GBK中文编码,CP65001表示UTF-8编码,CP54936表示GB18030编码,CP950表示BIG5繁体中文等等。


各种中文字符编码标准的关系

  • (中国大陆的标准)GB 13000.1-93
    =(国际标准)Unicode 1.1

  • (中国大陆标准)GB2312-80
    = 简称GB2312
    = Windows系统中的原先的CP936

  • (微软制定的)GBK
    = (微软在编码方面)对 GB2312 的扩展
    = (微软在所包含字符方面上包含了)GB 13000.1-93 + 其他部分汉字+ 台湾和香港的繁体 + 日语 + 朝鲜汉字
    = Unicode 1.1 + 其他部分汉字+ 台湾和香港的繁体 + 日语 + 朝鲜汉字

对于GBK:
在编码方面:向下兼容GB2312,但是和GB 13000不同
在内容方面:等价于GB13000

  • 微软中现在的新的CP936
    = GBK
    =兼容旧的GB2312

在技术编码方面上,演化顺序为:
ASCII ⇒ GB2312 ⇒ GBK ⇒ GB18030
后者对之前的,都是支持之前的编码,即向下兼容,即同一个字符,在这些编码中,都是同样的值,后面的标准,支持更多的字符。

区分中文编码的方法是高字节的最高位不为 0。

按照程序员的称呼,GB2312、GBK 到 GB18030 都属于双字节字符集 (DBCS)

中文字符相关编码标准

编码标准别名标准所属包含字符
ASCII国际通用
GB2312微软Windows中以前的CP936中国大陆6763个汉字和682个其它符号
Unicode 1.1国际通用20,902个字符
GB13000中国大陆20,902个字符
GBK微软Windows中现在的CP936微软21886个符号
GB18030微软Windows中的CP54936中国大陆27484个汉字+其他少数民族字符
【字符编码系列之四】Unicode实现之UTF-8详解 字符 代码点空间 | UTF-8 字节序列 (十六进制表示) | (二进制表示) --------------------+--------------------------------------------- 0000 0000-0000 007F | 0xxxxxxx 0000 0080-0000 07FF | 110xxxxx 10xxxxxx 0000 0800-0000 FFFF | 1110xxxx 10xxx 阅读详情

相关推荐

Unicode和UTF-8编码关系的详解及示例代码

而UTF-8是一种对Unicode字符进行编码的方式,它使用可变长度的字节序列来表示字符。在编程中,我们可以使用Unicode字符串来表示文本,并使用UTF-8进行编码和解码操作。而UTF-8是一种对Unicode字符进行编码的方式,它定义了如何将Unicode码点转换成字节序列。Unicode和UTF-8的关系可以简单地描述为:UTF-8是Unicode的一种实现方式,它使用可变长度的编码方式,根据不同的字符而变化字节长度。UTF-8使用可变长度的编码方式,根据Unicode码点的大小来确定字节长度。

TechSavant的博客 931

unicode编码存在转义字符,导致乱码问题的解决方案

【问题】后端针对一个字符串进行unicode编码后的,前端解码后出现乱码问题。本篇是为了记录一次解码出现乱码的解决方案,篇幅较短,废话不多说,请食用。unicode编码后的字符串,直接交给前端解码,会出现乱码的。后端需要做一些处理,记得做好异常抛出处理。解码后,就直接传给前端展示。

Lucky小小吴的小屋 1577

UTF-8转Unicode编码转换实战详解

如果说Unicode是字符世界的“联合国宪章”,那么UTF-8就是当今互联网通信中最广泛使用的“通用语言”。自1993年由Ken Thompson和Rob Pike设计以来,UTF-8凭借其卓越的兼容性、空间效率和鲁棒性,迅速成为Web协议、操作系统接口和文件格式的事实标准。其核心设计理念是:在保证完整覆盖Unicode的前提下,尽可能优化常见字符的存储开销,并保持与ASCII的完全向后兼容。说明:Idle表示空闲状态,准备接收新字符的第一个字节。若收到110xxxxx,进入。

weixin_42113456的博客 1334

Unicode、UTF-8编码详解

Unicode 编码

lixiangchibang的博客 2万+

ECN实战指南:如何用SAP系统搞定工程变更(附库存处理避坑技巧)

本文详细解析了如何在SAP系统中高效执行工程变更通知(ECN),特别聚焦PP模块的操作流程与库存处理技巧。通过实战案例和系统操作指南,帮助制造业企业避免库存混乱和生产中断,实现从创建到生效的全流程管理。

m5n6o7的博客 1079

SAP BTP开发入门:从PaaS到CAP/UI5的30天学习路线

在云计算与数字化转型的大背景下,企业系统集成与云端扩展需求激增,传统的单点开发模式正面临深刻变革。PaaS(平台即服务)作为云原生的核心概念,将基础设施、开发环境与应用服务统一封装,为企业提供了灵活的扩展能力。SAP BTP正是SAP生态中的PaaS平台,它承载着系统集成、低代码开发、AI服务与数据管理,成为连接S/4HANA等核心业务系统与创新应用的桥梁。对于ABAP开发者而言,掌握BTP不仅是技能升级,更是应对从传统部署向云端订阅模式转型的必由之路。本文从平台基础出发,梳理BTP的核心服务与开发模型(如

weixin_31766003的博客 284

关于Unicode编码和UTF-8编码

说到编码,得先从ASCII编码讲起。ASCII编码是由美国人发明,美国的字符不超过255个,所以ASCII编码使用了8bit 即一个字节来存储字符。由于汉字的数量远超255个,所以中国自己发明了一个GB2312编码来表示汉字,一般的汉字使用2个字节,对于一些生僻的汉字则使用更多的字节来表示,当然,GB2313编码是可以兼容ASCII码的。         然后,日本,韩国等等国家也自己发明了一套

lvzhanbin的博客 9940

论文阅读4——一种宽频带圆极化微带天线的设计

论文阅读——一种宽频带圆极化微带天线的设计(现在才觉得开始弄懂了一点,懂了一点之后又更糊涂了……)

weixin_64612422的博客 2317

带你正确认识Unicode和UTF-8

前言 相信很多小伙伴跟我一样,之前很长一段时间对Unicode和UFT-8一直搞得不清不楚,等到用的时候就网上搜一搜,大概懂了点是什么,隔一段时间后又搞忘了,简直阔怕啊。今天我将带您轻轻松松出困境,用正确的姿势学习和认识Unicode和UTF-8 ASCII码 由于计算机这玩意儿是英文为母语的老外发明的,在计算机发展早期,能用到计算机的也就是用英语的那么些国家,因此对于他们来说,用于表示计算机显示屏上要显示的字符也就大小写的英文字母、数字、标点符号、特殊符号、一些特殊字符再加上些控制字符就足矣,总共加起来.

qq_20255275的博客 8825

DeepSeek安装教程

两分钟讲述deepseek正确安装教程

weixin_45906703的博客 1664

小样本物体检测

Few-Shot Object Detection with Attention-RPN and Multi-Relation Detector 关键:提出了一个小样本数据集:数据集 步骤: 提取support img为一过滤特征 使用support img的特征来过滤query img,最后将过滤后的特征输入RPN网络中 RPN网络层的输出,会进行多头判断,使用全局信息检测,使用局部信息检测,一对多检测 Attention-Based Region Proposal Network Increme

qq_21157073的博客 5266

Unicode 和 UTF-8 详解

Unicode 和 UTF-8 详解

fancynthia的博客 3626

Matlab之App Designer 一键自动生成带有表格的报告

本文采用案例讲解的方式介绍了采用Matlab中的App Designer开发可视化GUI分析界面后,实现一键自动导出带有表格报告的方法和步骤。可以实现从报告编制等繁琐的工作中解脱出来。

m0_59012156的博客 356

Python有关Unicode UTF-8 GBK编码问题详解

Unicode也叫万国码、单一码,是计算机科学领域里的一项业界标准,包括字符集、编码方案等。对于世界上所有的语言文字再unicode中都可以查看到。【汉】字的编码解释官网https://www.unicode.org/cgi-bin/GetUnihanData.pl?codepoint=6C49 unicode编码就是为了统一世界上的编码,有一个统一的规范。但是它还存在一些问题。Unicode的问题 需要注意的是,Unicode只是一个符号集,它只规定了符号的二进制代码,却没有规定这个二进制代码应该如何存

16万+

基于共识的捆绑算法CBBA在多无人机多任务调度中的实现

在捆绑过程中,每个无人机根据自己的任务清单和其他无人机的任务清单,确定一个被称为“束”的集合。通过合理的任务分配和无人机协作,CBBA算法能够实现最优的任务调度,提高了多无人机系统的效率和执行能力。在每一轮迭代中,无人机根据自己的当前任务和位置信息将任务清单发送给其他无人机,并接收其他无人机发送过来的任务清单。通过比较其他无人机的任务清单和自身的任务清单,每个无人机可以更新自己的任务分配情况。在这一步中,每个无人机根据自己选择的新任务,更新自身的任务清单,并将更新后的清单发送给其他无人机。

持续更新 1156

【ComfyUI】Wan2.2 动态服饰描述驱动换装图生视频

本文介绍了一个基于ComfyUI的Wan2.2动态服饰描述驱动换装工作流,能通过自然语言描述实现人物图像的自动换装并生成动态视频。该工作流结合多模态输入、语言模型驱动生成和视频合成技术,包含图像加载、文本解析(使用Qwen2.5大模型)、潜变量编码、视频帧采样与插值(RIFE VFI)等核心模块,最终通过VHS_VideoCombine输出流畅换装视频。整个流程无需手动干预,支持从"哥特风格"到"未来装甲"等多样化服饰风格的精确转换,通过文本节点控制50-100

Mr数据杨 2586

Unicode中UTF-8与UTF-16编码详解

概述 本文通过介绍Unicode编码以及对应的两种编码方式UTF-8和UTF-16,让读者能够了解关于字符串编码的相关知识,同时能够弄清楚Unicode和UTF-8和UTF-16之间的关系。 本文的主要内容为: Unicode编码,包含Unicode编码基础知识以及与UTF-8和UTF-16这两种编码方式的关系 UTF-8编码,包含基础概念和Unicode编码转换到UTF-8编码方式 UTF-16编码,包含基础概念和Unicode编码转换到UTF-16编码方式 Jav

weixin_42899690的博客 2282

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

Unicode编码详解(三):UTF-8编码

Unicode编码详解(三):UTF-8编码 若觉得本文写得还可以,请多多关注本人所作书籍《C++语法详解》电子工业出版社出版,网盘地址: https://pan.baidu.com/s/1dIxLMN5b91zpJN2sZv1MNg 本文为原创文章,转载请注明出处,或注明转载自“黄邦勇帅(原名:黄勇) 注意:若对本文的专业术语不了解,请参阅本系列文章(一)和(二) 1、 UTF-8编码方式是目前使用最广泛的一种Unicode编码方式,但不是最早出现的,UTF-16比UTF-8早。 2、 UTF-8使用的是

黄邦勇帅的博客 6717

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

unicode编码和utf-8编码详解

unicode是国际通用编码,utf-8编码是unicode编码在网络之间(主要是网页)传输时的一种“变通”和“桥梁”编码。utf-8在网络之间传输时可以节约数据量。所以,使用操作系统无法搜索出txt文本。 按照utf-8创始人的愿望: 端(unicode)——传输(utf-8)——端(unicode),但是,后来,许多网站开发者在开发网页时直接使用utf-8编码。端(utf-8)——

追尋ゝ 1297

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

ANSI,Unicode,UTF-8编码详解

百度百科:ANSI编码 为使计算机支持更多语言,通常使用 0x80~0xFF 范围的 2 个字节来表示 1 个字符。比如:汉字 '中' 在中文操作系统中,使用 [0xD6,0xD0] 这两个字节存储。 不同的国家和地区制定了不同的标准,由此产生了 GB2312、GBK、GB18030、Big5、Shift_JIS 等各自的编码标准。这些使用多个字节来代表一个字符的各种汉字延伸编码方

1179

[开发基础]ASCII、ANSI、Unicode 和 UTF-8字符编码详解

话说计算机是由美国佬搞出来的嘛,他们觉得一个字节(可以表示256个编码)表示英语世界里所有的字母、数字和常用特殊符号已经绰绰有余额了(其实ASCII只用了前127个编码)。后来欧洲人不干了,法国人说:我需要在小写字母加上变音符号(如:é),德国人说:我也要加几个字母(Ä ä、Ö ö、Ü ü、ß)。于是,欧洲人就将ASCII没用完的编码(128-255)为自己特有的符号编码(后来称之为“扩展字符集...

YuanMxy'Home 953

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

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

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

编码详解(utf-8 unicode)

编码详解(utf-8 unicode)

u010129251的专栏 440

Java编码ASCII、GB2312、GBK、Unicode、UTF-8、UTF-16 编码方式详解

1 ASCII American Standard Code for Information Interchange。最早最通用的单字节编码系统,因为发明时间早,所以ASCII编码表的设计较为简单。 结构 ASCII表是单字节字符表,此表中一个(英文)字符用一个字节表示 在ASCII中从00000000(第0个)~00011111(第31个)前32被用来作为控制字符表示各种类似:响铃、退格、换页...

JavaEdge全是干货的技术号 4244

各种编码UNICODE、UTF-8、ANSI、ASCII、GB2312、GBK详解

GBK,ISO-8859-1,GB2312的本质区别 编码有几种 ,计算机最初是在美国等国家发明的 所以表示字符只有简单的几个字母只要对字母进行编码就好 我们标准码 iso-8859-1 这就是一个标准 但是后来计算机普及了 于是就中国要使用计算机了 但是机器不认得中文,于是就有了国际码。 gbk gb2312都是这类。两个其实一个,一个是标准(发布的代号),一个是简称。后来多了个阿拉

zxh2075的专栏 5922

ASCII、Unicode和UTF-8编码知识详解

ASCII、Unicode和UTF-8 1. ASCII码我们知道,在计算机内部,所有的信息最终都表示为一个二进制的字符串。每一个二进制位(bit)有0和1两种状态,因此八个二进制位就可以组合出256种状态,这被称为一个字节(byte)。也就是说,一个字节一共可以用来表示256种不同的状态,每一个状态对应一个符号,就是256个符号,从0000000到11111111。上个世纪60年代,美国制定了一套字符编码,对英语字符与二进制位之间的关系,做了统一规定。这被称为ASCII码,一直沿用至今。ASCII码一共规

yangf1275的专栏 507
上一篇: 代码中执行命令行-Python与Java版
下一篇: Python 3 爬虫之批量下载字帖图片
KingLearnJava
博客等级 码龄12年 93粉丝 84原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值