常用的字符集和字符编码
基础概念
字符
字符是各种文字和符号的总称,包括各国家文字、标点符号、图形符号、数字等
字符集
一个操作系统支持的字符的集合。
字符编码和解码
将每个字符都设置一个唯一编号,编码就是将字符集中的字符编号以一定形式转化为字节存储下来,解码则反之,将存储的字节转换为某个字符集的字符编号。
关于屏幕上的字符显示,其实显示的是字形码,将某字符集的编号和字形一一对应(忽略字体),则可以在屏幕上显示字符。
例如ASCII和GB系列,它们即是字符集也是编码方案,即表示它们的字符编码和存储的一样;但Unicode只是字符集,UTF-8一系列是编码方案。
ASCII
ASCII使用一个字节表示一个字符,包含所有大小写英文字母、数字0-9和一些符号等,实际只用了7位,最高位固定位0,范围为0x00~0x7F(0~127),共表示128字符。常用于美国和以英语为主的国家。
有个经常用到的技巧:由于大小写字母对应的ASCII的值相差32,所以小写字母转大写字母只需要 小写字母的ASCII值减去32 就可得到该字母的大写。(a是97,A是65)
附:ASCII码表
ISO-8859-1
别名Latin1,常用于描述北美和西欧语言,也是使用一个字节描述一个字符,范围为0x00~0xFF(0~255),其中0x00~0x7F和ASCII码一样,0x80-0x9F之间是控制字符,0xA0-0xFF之间是一些文字符号。
附:ISO-8859-1码表
中文编码(GB系列)
GB2312
全称《信息交换用汉字编码字符集·基本集》,是中国第一个汉字编码标准,GB是国标的首字母,共收录了 6763 个常用的汉字和字符,其中一级汉字3755个, 二级汉字3008个;
同时收录了包括 拉丁字母、 希腊字母、 日文、平假名及片假名字母、 俄语在内的682个字符。
GB2312是双字节编码,一个字符用两个字节表示,第一个字节称为高位字节(0xA1~0xF7),第二个字节称为低位字节(0xA1~0xFE)。为了兼容ASCII,两个字节的最高位都为1。
整个字符集分为94(01~94)个区,每个区又分为94(01~94)位,第88~94区未使用。
区位码
总共有 94 个区,每个区含有 94 个汉字或者字符,每个汉字或者字符都对应一个分区编号和分区内的位置编号,称为区位码。
国标码
国标码也叫交换码,用于交换文件所使用的编码,在早期,不同的操作系统可能使用不同的内码,如果它们之间要交换文件,则会发生乱码的现象,当时的解决方法是交换文件之前先转成交换码再交换,接收者收到之后再转成内码。交换码是比较早期的一种方案,目前系统大都采用内码作为交换码。
ASICII 码为 0-31 的这 32 个字符是不可显示的字符,为了避免和这些字符的码点冲突,将 分区编号和分区内位置编号都加上32 ,把这个转换的结果称为国标码。
比如:汉字 "中" 字分区编号是 54,分区内位置编号是 48,加上 32 之后,分区编号是 54 + 32 = 86,分区内位置编号是 48 + 32 = 80,所以 "中" 字 的国标码是 86 80
内码
国标码和ASICII码还是存在一定的重复,比如"中" 字的国标码是 86 80,对应第一个字节是 86,第二个字节是80,而在ASICII 码中它们分别代表大写字母V和大写字母P,这就无法区分它们到底是一个汉字,还是两个字母。
为了兼容ASCII,把国标码中的每个字节的最高位置为 1,还是以 "中" 字为例,它的国标码是 86 80,加上128后,第一个字节是86 + 128 = 214,第二个字节是 80 + 128 = 208,转化成 16 进制是 0xD6 0xD0。
国标码的每个字节都加上 128 后,得到国标码的机内码,简称内码,汉字是以内码的形式在计算机中存储和传播的。
附:GB2312码表
GBK
全称 《汉字内码扩展规范》,共收录了两万多个汉字和字符,完全兼容 GB2312,增加了一些人名、繁体字、日语和朝鲜语中的汉字,利用了GB2312未使用的编码空间。GBK并不是国家标准。
编码范围: 第一个字节 0x81–0xFE,第二个字节 0x40–0xFE。
附:GBK码表
GB18030
全称国家标准GB 18030-2005《信息技术 中文编码字符集》,共收录70244个汉字和字符,在GBK的基础上增加了中日韩语中的汉字和少数名族的文字及字符,完全兼容 GB2312,基本兼容 GBK。
GB18030 是变长多字节字符集,每个字或字符可以由一个,两个或四个字节组成。编码空间庞大,最多可定义161万个字符。
为了兼容GBK,前两个字节和GBK保持一致。
Unicode(万国码)
Unicode编码系统为表达任意语言的任意字符而设计。它使用4字节的数字来表达每个字母、符号,或者表意文字(ideograph)。每个数字代表唯一的至少在某种语言中使用的符号。
Unicode仅仅是字符集,它只规定了字符的唯一编号,编码是用UTF-8、UTF-16等编码格式。
实际上,如果每个字符都用Unicode规定的4字符,那绝对是非常浪费的,所以UTF系列对Unicode做了一定压缩和转换。
Unicode共分为17个plane(组),plane0称为基本平面,其他的称为扩展平面,数字范围是0~0x10FFFF,每一个数字,就是一个代码点(Code point)。
UTF-8
变长编码格式(1~4字节),是Unicode的一种实现。将代码点转为二进制bit,不够位数左侧补0。为了解决字符间分隔,即到底几个字节表示一个字符,采用字节的最高位连续1的个数决定。如下表,这种格式比较省空间,第一段和ASCII相同
代码段 | 编码 |
0x000000~0x00007F | 0xxxxxxx |
0x000080~0x0007FF | 110xxxxx 10xxxxxx |
0x000800~0x00FFFF | 1110xxxx 10xxxxxx 10xxxxxx |
0x010000~0x10FFFF | 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx |
UTF-16
UTF-16使用2个或4个字节,其中2个字节表示基本平面,4个字节表示扩展平面。为了解决字符分隔,将基本平面的两段代码点保留,不表示任意字符。
110110xxxxxxxxxx(0xD800~0xD8FF)为高位代理,
110111xxxxxxxxxx(0xDC00~0xDFFF)为低位代理,
如果下两个字节以这俩开头,那么表示该字符是扩展平面的,需要读取4个字节,否则就是基本平面的,读取2个字节。
代码段 | 编码 |
0x000000~0x00FFFF | xxxxxxxx xxxxxxxx |
0x010000~0x10FFFF | 110110yy yyyyyyyy 110111xx xxxxxxxx |
UTF-32
UTF-32使用4个字节存储代码点,将代码点转为32位bit,位数不够左侧补0。
代码段 | 编码 |
0x000000~0x10FFFF | xxxxxxxx xxxxxxxx xxxxxxxx xxxxxxxx |
字节序(ByteOrder Mark)
也叫大小端(BE,LE),超过2个字节就涉及到存储时,高字节放在高地址还是低地址的问题。如果高位字节在高地址,低位字节在低地址,那么称为小端,反之称为大端。
例如 0x1234,大端模式:
低地址-->高地址
0x12 0x34
小端模式:
低地址-->高地址
0x34 0x12
字节序一般放在文件的开始,标记高位在前还是低位在前。UTF-8可以没有字节序。字节序如下表
编码格式 | 字节序 |
UTF-8 | EF BB BF |
UTF-16 LE | FF FE |
UTF-16 BE | FE FF |
UTF-32 LE | FF FE 00 00 |
UTF-32 BE | 00 00 FE FF |
相关文章:
常用的字符集和字符编码
基础概念 字符 字符是各种文字和符号的总称,包括各国家文字、标点符号、图形符号、数字等 字符集 一个操作系统支持的字符的集合。 字符编码和解码 将每个字符都设置一个唯一编号,编码就是将字符集中的字符编号以一定形式转化为字节存储下来,…...
容器技术简介
引言 随着云计算、大数据、人工智能等技术的不断发展,容器技术作为一种新兴的虚拟化技术,正逐渐成为IT领域的热点。容器技术可以帮助开发者更好地管理、部署和扩展应用程序,提高开发效率和应用程序的可靠性。本文将深入探讨容器技术的概念、…...

数据分享|R语言用lme4多层次(混合效应)广义线性模型(GLM),逻辑回归分析教育留级调查数据...
全文链接:http://tecdat.cn/?p22813 本教程为读者提供了使用频率学派的广义线性模型(GLM)的基本介绍。具体来说,本教程重点介绍逻辑回归在二元结果和计数/比例结果情况下的使用,以及模型评估的方法(点击文末“阅读原文…...

macos 不支持svn安装
macos 10.13可能不支持svn命令,所以要安装 xcode-select --install 弹窗在线安装失败的话只能手动下载安装 打开:Sign In - Apple 搜索Command Line Tools (macOS 10.13) 下载9.4.1版本直接安装后即可...
如何通过实际操作来加深对Linux命令和概念的理解?
作为一个新手,你一定不要被Linux那堆命令吓到。其实,它们就像你的“超能力”,只要你掌握它们,你就能成为Linux世界的超级英雄! 首先,我们要了解的是,Linux命令其实就像你的“魔法咒语”&#x…...

【开发语言】C语言与Python的互操作详解
博主未授权任何人或组织机构转载博主任何原创文章,感谢各位对原创的支持! 博主链接 本人就职于国际知名终端厂商,负责modem芯片研发。 在5G早期负责终端数据业务层、核心网相关的开发工作,目前牵头6G算力网络技术标准研究。 博客…...
华为配置聚合vlan(Super vlan--Sub vlan)
聚合vlan,Aggregation vlan,也称Super vlan,可以实现用Sub vlan二层隔离广播域,但又将这些Sub vlan聚合使用同一IP子网和网关的情况。 这样,多个Sub-VLAN共享一个网关地址,节约了子网号、子网定向广播地址、…...

CentOS7安装时直接跳过了安装信息摘要页面的解决方法
最近在配置Hadoop虚拟机的时候,创建的centos7虚拟机在安装信息摘要时直接自动跳过,直接跳到设置用户名和密码,在重复多次的重新删除安装后发现了问题所在: 在进行到选择操作系统来源时,注意是否出现“该操作系统将使用…...

python基础运用例子
python基础运用例子 1、⼀⾏代码交换 a , b :a, b b, a2、⼀⾏代码反转列表 l[::-1]3、合并两个字典 res {**dict1, **dict2}**操作符合并两个字典for循环合并dict(a, **b) 的方式dict(a.items() b.items()) 的方式dict.update(other_dict) 的方式 4、⼀⾏代码列…...

k8s基本概念
一、什么是Kubernetes二:Kubernetes部署方式的演变三、为什么要用K8S四、K8S的特性五、Kubernetes 集群架构与组件5.1 Master 组件① Kube-apiserver② Kube-controller-manager③ Kube-scheduler④ AUTH 认证模块 5.2 配置存储中心5.3 Node 组件① Kubelet② Kube-…...
Python exp() 函数
描述 exp() 方法返回x的指数,ex。 语法 以下是 exp() 方法的语法: import mathmath.exp( x ) 注意:exp()是不能直接访问的,需要导入 math 模块,通过静态对象调用该方法。 参数 x -- 数值表达式。 返回值 返回x的指数,ex。 实例 以下展…...
Day 34 贪心算法 part03 : 1005.K次取反后最大化的数组和 134. 加油站 135. 分发糖果
134. 加油站 在一条环路上有 n 个加油站,其中第 i 个加油站有汽油 gas[i] 升。 你有一辆油箱容量无限的的汽车,从第 i 个加油站开往第 i1 个加油站需要消耗汽油 cost[i] 升。你从其中的一个加油站出发,开始时油箱为空。 给定两个整数数组 gas…...

气象站的构成及功能应用
气象站是一种用于观测、记录和报告天气数据的设备。它是由数据采集系统、通讯系统、供电系统和立杆支架构成。 一、气象站的构成: 数据采集系统:用于测量气温、湿度、风速、风向、气压、降雨量、雪深等气象参数。 通讯系统:收集和处理传感…...

Qt中布局管理使用总结
目录 1. 五大布局 1.1 QVBoxLayout垂直布局 1.2 QHBoxLayout水平布局 1.3 QGridLayout网格布局 1.4 QFormLayout表单布局 1.5 QStackedLayout分组布局 1.6 五大布局综合应用 2. 分割窗口 3. 滚动区域 4. 停靠区域 1. 五大布局 1.1 QVBoxLayout垂直布局 #include <…...

(位运算) 剑指 Offer 15. 二进制中1的个数 ——【Leetcode每日一题】
❓ 剑指 Offer 15. 二进制中1的个数 难度:简单 编写一个函数,输入是一个无符号整数(以二进制串的形式),返回其二进制表达式中数字位数为 ‘1’ 的个数(也被称为 汉明重量).)。 提示ÿ…...

基于SSM的新能源汽车在线租赁系统
末尾获取源码 开发语言:Java Java开发工具:JDK1.8 后端框架:SSM 前端:采用Vue技术开发 数据库:MySQL5.7和Navicat管理工具结合 服务器:Tomcat8.5 开发软件:IDEA / Eclipse 是否Maven项目&#x…...
CTF 代码审计之绕过过滤的空白字符
题目 <?php header("Content-Type:text/html;charsetutf-8"); highlight_file(02kbzf.php);//引入名为 flag2.php 的文件。 include(f . lag2 . .php);//初始化变量 $info 和 $req。 $info ""; $req [];//读取文件 flag2.php 的内容到变…...

【Vue】 Vue3 安装说明,适合小白新手
1、独立版本 我们可以在 Vue.js 的官网上直接下载最新版本, 并用 下载 Vue.js https://unpkg.com/vuenext 2、使用 CDN 方法 以下推荐国外比较稳定的两个 CDN,国内还没发现哪一家比较好,目前还是建议下载到本地。 Staticfile CDN(国内&am…...

电脑提示“系统找不到指定的文件”怎么办?
“系统找不到指定的文件”对于Windows用户来说是一个很常见的错误,尤其是Win10用户,经常会遇到Win10提示找不到指定文件。在此错误后面有时还会出现错误代码:0x80070002,但是,故障类型或代码在不同的操作系统规范上是不…...

向openssl中添加一个最简单的算法
文章目录 一、尝试在sha.c中添加新的函数二、添加自定义算法2.1 添加对应文件2.2 相关配置2.3 编译运行 一、尝试在sha.c中添加新的函数 在尝试添加新算法前,我先尝试在原有的旧算法中添加一个新函数,看是否能被编译并生成对应的动态链接库。 关于open…...

Docker 离线安装指南
参考文章 1、确认操作系统类型及内核版本 Docker依赖于Linux内核的一些特性,不同版本的Docker对内核版本有不同要求。例如,Docker 17.06及之后的版本通常需要Linux内核3.10及以上版本,Docker17.09及更高版本对应Linux内核4.9.x及更高版本。…...

MongoDB学习和应用(高效的非关系型数据库)
一丶 MongoDB简介 对于社交类软件的功能,我们需要对它的功能特点进行分析: 数据量会随着用户数增大而增大读多写少价值较低非好友看不到其动态信息地理位置的查询… 针对以上特点进行分析各大存储工具: mysql:关系型数据库&am…...

智能在线客服平台:数字化时代企业连接用户的 AI 中枢
随着互联网技术的飞速发展,消费者期望能够随时随地与企业进行交流。在线客服平台作为连接企业与客户的重要桥梁,不仅优化了客户体验,还提升了企业的服务效率和市场竞争力。本文将探讨在线客服平台的重要性、技术进展、实际应用,并…...

优选算法第十二讲:队列 + 宽搜 优先级队列
优选算法第十二讲:队列 宽搜 && 优先级队列 1.N叉树的层序遍历2.二叉树的锯齿型层序遍历3.二叉树最大宽度4.在每个树行中找最大值5.优先级队列 -- 最后一块石头的重量6.数据流中的第K大元素7.前K个高频单词8.数据流的中位数 1.N叉树的层序遍历 2.二叉树的锯…...

Aspose.PDF 限制绕过方案:Java 字节码技术实战分享(仅供学习)
Aspose.PDF 限制绕过方案:Java 字节码技术实战分享(仅供学习) 一、Aspose.PDF 简介二、说明(⚠️仅供学习与研究使用)三、技术流程总览四、准备工作1. 下载 Jar 包2. Maven 项目依赖配置 五、字节码修改实现代码&#…...

【C++进阶篇】智能指针
C内存管理终极指南:智能指针从入门到源码剖析 一. 智能指针1.1 auto_ptr1.2 unique_ptr1.3 shared_ptr1.4 make_shared 二. 原理三. shared_ptr循环引用问题三. 线程安全问题四. 内存泄漏4.1 什么是内存泄漏4.2 危害4.3 避免内存泄漏 五. 最后 一. 智能指针 智能指…...

基于Springboot+Vue的办公管理系统
角色: 管理员、员工 技术: 后端: SpringBoot, Vue2, MySQL, Mybatis-Plus 前端: Vue2, Element-UI, Axios, Echarts, Vue-Router 核心功能: 该办公管理系统是一个综合性的企业内部管理平台,旨在提升企业运营效率和员工管理水…...
jmeter聚合报告中参数详解
sample、average、min、max、90%line、95%line,99%line、Error错误率、吞吐量Thoughput、KB/sec每秒传输的数据量 sample(样本数) 表示测试中发送的请求数量,即测试执行了多少次请求。 单位,以个或者次数表示。 示例:…...

【Linux手册】探秘系统世界:从用户交互到硬件底层的全链路工作之旅
目录 前言 操作系统与驱动程序 是什么,为什么 怎么做 system call 用户操作接口 总结 前言 日常生活中,我们在使用电子设备时,我们所输入执行的每一条指令最终大多都会作用到硬件上,比如下载一款软件最终会下载到硬盘上&am…...

在 Visual Studio Code 中使用驭码 CodeRider 提升开发效率:以冒泡排序为例
目录 前言1 插件安装与配置1.1 安装驭码 CodeRider1.2 初始配置建议 2 示例代码:冒泡排序3 驭码 CodeRider 功能详解3.1 功能概览3.2 代码解释功能3.3 自动注释生成3.4 逻辑修改功能3.5 单元测试自动生成3.6 代码优化建议 4 驭码的实际应用建议5 常见问题与解决建议…...