字符集与字符编码

目录

  • 一、字符集概述
  • 二、Unicode
  • 三、Unicode字符集
  • 四、Unicode编码规则
  • 五、Unicode字符编码规则 UTF-8
  • 六、Unicode 字符编码规则 UTF-16
  • 七、Unicode 字符编码规则 UTF-32
  • 八、UTF 字节顺序标记(BOM)
  • 九、Windows 代码页
  • 十、Windows(ANSI) 字符集
  • 十一、GB2312、GBK、GB18030

一、字符集概述

在计算机中,所有的数据在存储和运算时都要使用二进制数表示,例如,像 A、B、a、b等52个大小写字母以及0、1等数字还有一些常用的符号如 $、#、@ 等。

具体用哪些二进制数字表示哪个符号,每个人都可以约定自己的一套规则,这就叫编码规则。而大家如果要想互相通信而不造成混乱,那么大家就必须使用相同的编码规则,于是美国有关的标准化组织就制定了ASCII编码( ASCII 由 ANSI 制定),统一规定了上述常用符号用哪些二进制数来表示。

随着计算机的普及,在不同系统、国家和地区也出现了很多字符编码,比如 GB2312、BIG5, Shift JIS 等。对于同一个二进制数据,不同的编码会解析出不同的字符。于是 Unicode编码应运而生。 Unicode 为每种语言中的每个字符设定了统一并且唯一的二进制编码

二、Unicode

Unicode,准确说为Unicode标准,是计算机科学领域里的一项业界标准,包括字符集、编码方案等。该标准由 Unicode 联盟维护(该联盟于1991 年 1 月 3 日在加利福尼亚成立)。

Unicode 标准是基于Unicode 通用字符集( Unicode Universal Character Set)的标准来发展,该标准由国际标准 ISO/IEC 10646 定义的标准字符集。

Unicode 为每种语言中的每个字符设定了统一并且唯一的二进制编码,以满足跨语言、跨平台进行文本转换、处理的要求。

Unicode 标准定义了一个代码空间,一组数值,范围从 0 到 10FFFF,称为 码点(code point),表示为U+0000 到 U+10FFFF,即表示编码范围为 0x0000 - 0x10FFFF,可定义一百多万个字符。

10 :0~16 共17平面

FFFF : 0~ 65535 共65536个字符(码点)

Unicode 代码空间分为 17 个平面,编号为 0 到 16,平面 0 是基本多语言平面 (BMP)。每个平面有2^16=65536个码位。Unicode计划使用了17个平面,一共有17*65536=1114112个码位

三、Unicode字符集

字符编码将字符映射为特定的字节规则,这些被某种规则定义的字符,统称为其的字符集。

Unicode 字符集可以通过不同的字符编码来实现,Unicode 标准定义了 Unicode Transformation Formats (UTF) 和 Universal Coded Character Set(UCS)

Unicode字符集常见的字符编码:

  • UTF 编码规则有 UTF-8、UTF-16、UTF-32

  • UCS 编码规则有 UCS-2(UTF-16)、UCS-4(UTF-32)

四、Unicode编码规则

Unicode 字符集常见的编码规则为UTF,其字符编码规则有 UTF-8、UTF-16、UTF-32,分别以 8位(1字节)、16位(2字节)、32位(4字节) 作为编码单位,即需要 1~4 个字节来存储。

五、Unicode字符编码规则 UTF-8

UTF-8 是一种变长字符编码,它可将字符编码为 1 至 4 个字节,具体取决于码点数值中有效二进制位的数量。UTF-8是我们最常见和常用的编码规则。

Unicode 编码范围(16进制)UTF-8 编码方式(二进制)字节
00 0000 – 00 007F0xxxxxxx (ASCII码)1
00 0080 – 00 07FF110xxxxx 10xxxxxx2
00 0800 – 00 FFFF1110xxxx 10xxxxxx 10xxxxxx3
01 0000 - 10 FFFF11110xxx 10xxxxxx 10xxxxxx 10xxxxxx44

六、Unicode 字符编码规则 UTF-16

UTF-16 也是一种变长字符编码, 它可将字符编码成 2 字节或者 4 字节。

Unicode 编码范围(16进制)0000 0000 - 0000 FFFF
具体Unicode码(二进制)xxxxxxxx xxxxxxxx
UTF-16编码方式(二进制)xxxxxxxx xxxxxxxx
字节2
Unicode 编码范围(16进制)0001 0000 - 0010 FFFF
具体Unicode码(二进制)yy yyyyyyyy xx xxxxxxxx
UTF-16编码方式(二进制)110110yy yyyyyyyy 110111xx xxxxxxxx
字节4

七、Unicode 字符编码规则 UTF-32

UTF-32 是固定长度的编码,始终占用 4 个字节,可容纳所有的 Unicode 字符。因此,只需直接存储 Unicode 码即可,不需要进行编码转换。

UTF-32缺点:

  • 始终占用4字节,浪费空间。

UTF-32优点:

  • 规则简单, Unicode 不需转换;

  • 位置固定,处理方便,查询效率高;

  • 可存储更多符号;

  • 最大程度兼容其他 Unicode 编码规则的字符;

八、UTF 字节顺序标记(BOM)

Unicode 字节顺序标记( byte order mark ,BOM ) 是一个 Unicode 字符,它的作用是确定 Unicode 文件或流的字节顺序。

最小编码单元是多字节才会有字节顺序问题。UTF-8 的最小编码单元是一字节,所以 它是没有字节顺序问题。UTF-16 的最小编码单元是 2 个字节,在解析一个 UTF-16 字符之前,需要知道每个编码单元的字节顺序。

字符“A”的 Unicode 编码为 0041,字符“䄀(huò)”的 Unicode 编码为 4100,当计算机收到UTF-16 字节流 0041 时,系统是如何识别的呢?

在 UTF-16中,可以将 BOM ( U+FEFF) 作为文件或字符流的第一个字符放置,以指示文件或流的所有 16 位代码单元的字节顺序。

因此,对于多字节的编码单元,需要有一个标记( U+FEFF)显式的告诉计算机,按照什么样的顺序解析字符,也就是字节顺序。字节顺序分为 Big Endian 和 Little Endian。

当计算机收到 UTF 字节流 0041 时:

  • Big Endian :BOM 为 FEFF / 0000FEFF,文件的字节顺序标记为 0041

  • Little Endian :BOM 为 FFFE / FFFE0000,文件的字节顺序标记为 4100

编码文件头
UTF-8EF BB BF 41
UTF-16BEFE FF 00 41
UTF-16LEFF FE 41 00
UTF-32BE00 00 FE FF 00 00 00 41
UTF-32LEFF FE 00 00 41 00 00 00

九、Windows 代码页

  • 437—最初的IBM PC代码页,实现了扩展ASCII字符集

  • 737—希腊语

  • 850—“多语言(Latin-1)”(西欧语言)

  • 852—“斯拉夫(Latin-2)”(中欧及东欧语言)

  • 855—西里尔(Cyril)字母

  • 857—土耳其语

  • 858—带欧元符号的“多语言”

  • 860—葡萄牙语

  • 861—冰岛语

  • 863—法语加拿大英语

  • 865—北欧

  • 866—西里尔(Cyril)字母

  • 869—希腊语

十、Windows(ANSI) 字符集

  • 874—泰文字母 (扩展了ISO 8859-11 )

  • 1250—东欧拉丁字母 (与ISO-8859-2类似)

  • 1251—古斯拉夫语 (与ISO-8859-5和KOI-8不兼容)

  • 1252—西欧拉丁字母ISO-8859-1 (ISO-8859-1的超集)

  • 1253—希腊语 (与ISO 8859-7类似)

  • 1254—土耳其语 (ISO 8859-9的超集)

  • 1255—希伯来语 (几乎是ISO 8859-8的超集)

  • 1256—阿拉伯语 (与ISO 8859-6不兼容)

  • 1257—波罗的海 (不是ISO 8859-4;后来的ISO 8859-13密切相关)

  • 1258—越南语

  • 1254—土耳其语

十一、GB2312、GBK、GB18030

GB2312 或 GB 2312-80 是中国国家标准简体中文字符集,全称《信息交换用汉字编码字符集·基本集》,又称 GB 0,由中国国家标准总局发布,1981 年 5 月 1 日实施。GB 2312 编码通行于中国大陆。GB 2312 的编码范围为 2121H-777EH,与 ASCII 有重叠,通行方法是将 GB 码两个字节的最高位置 1 以示区别。

GBK 即汉字内码扩展规范,K 为汉语拼音 Kuo Zhan(扩展)中“扩”字的声母。GBK 向下与 GB2312 完全兼容,向上支持 ISO 10646 国际标准。GBK 包含GB2312 中的全部汉字、非汉字符号、 BIG5 中的全部汉字 等。GBK 采用双字节表示,总体编码范围为 8140-FEFE 之间。

GB18030,全称国家标准 GB 18030-2005《信息技术中文编码字符集》,最新的内码字集,是 GB 18030-2000的修订版。GB 18030 与 GB 2312-1980 和 GBK 兼容。采用一二四字节变长编码,最多可定义 161 万个字符。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/49097.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

leetcode原题: 堆箱子(动态规划实现)

题目: 给你一堆n个箱子,箱子宽 wi、深 di、高 hi。箱子不能翻转,将箱子堆起来时,下面箱子的宽度、高度和深度必须大于上面的箱子。实现一种方法,搭出最高的一堆箱子。箱堆的高度为每个箱子高度的总和。 输入使用数组…

elelementui组件

一、按钮 1、按钮样式 使用type、plain、round和circle属性来定义 Button 的样式。 2、主要代码 <el-row><el-button>默认按钮</el-button><el-button type"primary">主要按钮</el-button><el-button type"success">…

SQL函数和过程

一、存储过程概述 1.1 理解 含义&#xff1a;存储过程的英文是 Stored Procedure 。它的思想很简单&#xff0c;就是一组经过 预先编译 的 SQL 语句 的封装。 执行过程&#xff1a;存储过程预先存储在 MySQL 服务器上&#xff0c;需要执行的时候&#xff0c;客户端只需要向服…

DataLoader PyTorch 主要参数的含义

定义&#xff1a; DataLoader类是一个用于从数据集&#xff08;dataset&#xff09;中加载数据&#xff0c;并以迭代器&#xff08;iterator&#xff09;的形式返回数据样本&#xff08;data samples&#xff09;的工具。您给出的两个字典&#xff08;dictionary&#xff09;分…

(三)行为模式:2、命令模式(Command Pattern)(C++示例)

目录 1、命令模式&#xff08;Command Pattern&#xff09;含义 2、命令模式的UML图学习 3、命令模式的应用场景 4、命令模式的优缺点 5、C实现命令模式的实例 1、命令模式&#xff08;Command Pattern&#xff09;含义 命令模式&#xff08;Command&#xff09;&#xff…

简单屏幕共享 通过web screego windows 生成证书

生成证书用 linux 生成&#xff0c;在 windows 下使用 windows 生成证书 https://juejin.cn/post/6925006735933440014 下载地址 https://github.com/screego/server/releases 修改完配置后&#xff0c;运行 screego serve 需要修改的几个地方 # 局域网 ip 或公网 ip&…

1. HBase中文学习手册之揭开HBase的神秘面纱

揭开Hbase的神秘面纱 1.1 欢迎使用 Apache Hbase1.1.1 什么是 Hbase?1.1.2 Hbase的前世今生1.1.3 HBase的技术选型&#xff1f;1.1.3.1 不适合使用 HBase的场景1.1.3.2 适合使用 HBase的场景 1.1.4 HBase的特点1.1.4.1 HBase的优点1.1.4.2 HBase的缺点 1.1.5 HBase设计架构 1.…

1.Flink源码编译

目录 1.环境版本 1.1 jdk 1.2.maven 1.3.node 1.4.scala 2.下载flink源码 3.编译源码 4.idea打开flink源码 5.运行wordcount 1.环境版本 软件地址 链接&#xff1a;https://pan.baidu.com/s/1ZxYydR8rBfpLCcIdaOzxVg 提取码&#xff1a;12xq 1.1 jdk 1.2 maven 1.…

详解react 15~18新增特性

React 15.x 版本的新增特性&#xff1a; 创建组件类&#xff1a;在 React 15 中&#xff0c;可以使用 createClass 方法来创建组件类。这个方法允许你定义组件的生命周期方法、渲染函数以及其他功能。 PropTypes&#xff1a;React 15 引入了 PropTypes&#xff0c;它是一种用于…

Ubuntu22.04编译安装Mysql5.7.35

新升级的ubuntu22.04版本&#xff0c;该版本默认openssl已经升级到3.0&#xff0c;所以编译过程遇到一些问题记录一下。 编译步骤&#xff1a; 安装依赖 gcc g已经安装过就不需要再安装了。 apt-get install cmake apt-get install libaio-dev apt-get install libncurses5…

SpringBoot 2.7 集成 Netty 4 模拟服务端与客户端通讯入门教程

文章目录 1 摘要2 核心 Maven 依赖3 核心代码3.1 服务端事务处理器 (DemoNettyServerHandler)3.2 服务端连接类(InitNettyServer)3.3 客户端事务处理器(DemoNettyClientHandler)3.4 客户端连接类(DemoNettyClient) 4 测试4.1 测试流程4.2 测试结果4.3 测试结论 5 推荐参考资料6…

中国缝纫线行业调研与投资方向报告(2023版)

内容简介&#xff1a; 缝纫线按原材料主要分为天然纤维线及合成纤维线两大类。天然纤维线由棉花、羊毛或蚕丝制成&#xff0c;其中棉线最常用&#xff0c;也更适合于缝制内衣等精细织物。合成织维线的原材料可为涤纶、尼龙&#xff08;锦纶&#xff09;等&#xff0c;其中涤纶…

Linux centos7 统计文本文件中所有单词

统计文本文件中高频词是常见操作&#xff08;参考文章&#xff1a;Linux centos7 高频词统计&#xff09;。而查找并统计文本文件中共有多少单词&#xff08;独立字符串&#xff0c;包括中文或数字串&#xff09;也是一项很好地实践项目。 本文主要应用命令替换、循环结构、so…

Go 1.21中值得关注的几个变化

美国时间2023年8月8日&#xff0c;Go团队在Go官博上正式发布了1.21版本[2]&#xff01; 早在今年4月末&#xff0c;我就撰写了文章《Go 1.21新特性前瞻[3]》&#xff0c;对Go 1.21可能引入的新特性、新优化和新标准库包做了粗略梳理。 在6月初举办的GopherChina 2023大会上[4]&…

Docker(二) Docker容器

在docker中的容器都是由镜像所创建的&#xff0c;一个镜像可以创建多个容器。 一、调试Docker 启动Docker systemctl start docker 查看Docker中有哪些镜像 docker images 下载镜像 docker pull hello-world 运行镜像 docker run hello-world 出现 Hello from Docker! 这…

【官方中文文档】Mybatis-Spring #注入映射器

注入映射器 与其在数据访问对象&#xff08;DAO&#xff09;中手工编写使用 SqlSessionDaoSupport 或 SqlSessionTemplate 的代码&#xff0c;还不如让 Mybatis-Spring 为你创建一个线程安全的映射器&#xff0c;这样你就可以直接注入到其它的 bean 中了&#xff1a; <bea…

Python 从入门到实践第3版(中文版)正式版+编制版+电子版

Python编程&#xff1a;从入门到实践&#xff08;第3版&#xff09; ([美] 埃里克 • 马瑟斯&#xff08;Eric Matthes&#xff09;) 2023 (Z-Library)

WPF中手写地图控件(1)——基于瓦片地图的控件

基于瓦片地图的控件 本控件使用dotnet编写&#xff0c;基于WPF的数据绑定自动生成&#xff0c;可以用于展示瓦片地图。为了提高地图加载速度&#xff0c;我们使用了内存缓存和本地文件缓存技术&#xff0c;并采用从中心扩散异步等加载方式。这些技术的结合&#xff0c;使得地图…

【SA8295P 源码分析】系列文章链接汇总 - 持续更新中

【SA8295P 源码分析】00 - 系列文章链接汇总 - 持续更新中 一、分区、下载、GPIO等杂项相关二、开机启动流程代码分析二、OpenWFD 显示屏模块三、Touch Panel 触摸屏模块四、QUPv3 及 QNX Host透传配置五、Camera 摄像头模块&#xff08;当前正在更新中...&#xff09;六、网络…

java八股文面试[数据结构]——List和Set的区别

List和Set是用来存放集合的接口&#xff0c;并且二者都继承自接接口Collection List 中的元素存放是有序的&#xff0c;可以存放重复的元素&#xff0c;检索效率较高&#xff0c;插入删除效率较低。 Set 没有存放顺序不能存放重复元素检索效率较低&#xff0c;插入删除效率较…