当前位置: 首页 > news >正文

常用的字符集和字符编码

 基础概念

字符

字符是各种文字和符号的总称,包括各国家文字、标点符号、图形符号、数字等

字符集

一个操作系统支持的字符的集合。

字符编码和解码

将每个字符都设置一个唯一编号,编码就是将字符集中的字符编号以一定形式转化为字节存储下来,解码则反之,将存储的字节转换为某个字符集的字符编号。

关于屏幕上的字符显示,其实显示的是字形码,将某字符集的编号和字形一一对应(忽略字体),则可以在屏幕上显示字符。

例如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~0x00007F0xxxxxxx
0x000080~0x0007FF110xxxxx 10xxxxxx
0x000800~0x00FFFF1110xxxx 10xxxxxx 10xxxxxx
0x010000~0x10FFFF11110xxx 10xxxxxx 10xxxxxx 10xxxxxx

UTF-16

UTF-16使用2个或4个字节,其中2个字节表示基本平面,4个字节表示扩展平面。为了解决字符分隔,将基本平面的两段代码点保留,不表示任意字符。

110110xxxxxxxxxx(0xD800~0xD8FF)为高位代理,

110111xxxxxxxxxx(0xDC00~0xDFFF)为低位代理,

如果下两个字节以这俩开头,那么表示该字符是扩展平面的,需要读取4个字节,否则就是基本平面的,读取2个字节。

代码段编码
0x000000~0x00FFFFxxxxxxxx xxxxxxxx
0x010000~0x10FFFF110110yy yyyyyyyy 110111xx xxxxxxxx

UTF-32

UTF-32使用4个字节存储代码点,将代码点转为32位bit,位数不够左侧补0。

代码段编码
0x000000~0x10FFFFxxxxxxxx xxxxxxxx xxxxxxxx xxxxxxxx

字节序(ByteOrder Mark)

也叫大小端(BE,LE),超过2个字节就涉及到存储时,高字节放在高地址还是低地址的问题。如果高位字节在高地址,低位字节在低地址,那么称为小端,反之称为大端。

例如 0x1234,大端模式:

低地址-->高地址

0x12      0x34

小端模式:

低地址-->高地址

0x34      0x12

字节序一般放在文件的开始,标记高位在前还是低位在前。UTF-8可以没有字节序。字节序如下表

编码格式字节序
UTF-8EF BB BF
UTF-16 LEFF FE
UTF-16 BEFE FF
UTF-32 LEFF FE 00 00
UTF-32 BE00 00 FE FF

相关文章:

常用的字符集和字符编码

基础概念 字符 字符是各种文字和符号的总称,包括各国家文字、标点符号、图形符号、数字等 字符集 一个操作系统支持的字符的集合。 字符编码和解码 将每个字符都设置一个唯一编号,编码就是将字符集中的字符编号以一定形式转化为字节存储下来&#xff0c…...

容器技术简介

引言 随着云计算、大数据、人工智能等技术的不断发展,容器技术作为一种新兴的虚拟化技术,正逐渐成为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的个数 难度&#xff1a;简单 编写一个函数&#xff0c;输入是一个无符号整数&#xff08;以二进制串的形式&#xff09;&#xff0c;返回其二进制表达式中数字位数为 ‘1’ 的个数&#xff08;也被称为 汉明重量).&#xff09;。 提示&#xff…...

基于SSM的新能源汽车在线租赁系统

末尾获取源码 开发语言&#xff1a;Java Java开发工具&#xff1a;JDK1.8 后端框架&#xff1a;SSM 前端&#xff1a;采用Vue技术开发 数据库&#xff1a;MySQL5.7和Navicat管理工具结合 服务器&#xff1a;Tomcat8.5 开发软件&#xff1a;IDEA / Eclipse 是否Maven项目&#x…...

CTF 代码审计之绕过过滤的空白字符

题目 &#xfeff;<?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&#xff0c;国内还没发现哪一家比较好&#xff0c;目前还是建议下载到本地。 Staticfile CDN&#xff08;国内&am…...

电脑提示“系统找不到指定的文件”怎么办?

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

向openssl中添加一个最简单的算法

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

利用ngx_stream_return_module构建简易 TCP/UDP 响应网关

一、模块概述 ngx_stream_return_module 提供了一个极简的指令&#xff1a; return <value>;在收到客户端连接后&#xff0c;立即将 <value> 写回并关闭连接。<value> 支持内嵌文本和内置变量&#xff08;如 $time_iso8601、$remote_addr 等&#xff09;&a…...

【git】把本地更改提交远程新分支feature_g

创建并切换新分支 git checkout -b feature_g 添加并提交更改 git add . git commit -m “实现图片上传功能” 推送到远程 git push -u origin feature_g...

高防服务器能够抵御哪些网络攻击呢?

高防服务器作为一种有着高度防御能力的服务器&#xff0c;可以帮助网站应对分布式拒绝服务攻击&#xff0c;有效识别和清理一些恶意的网络流量&#xff0c;为用户提供安全且稳定的网络环境&#xff0c;那么&#xff0c;高防服务器一般都可以抵御哪些网络攻击呢&#xff1f;下面…...

Go 并发编程基础:通道(Channel)的使用

在 Go 中&#xff0c;Channel 是 Goroutine 之间通信的核心机制。它提供了一个线程安全的通信方式&#xff0c;用于在多个 Goroutine 之间传递数据&#xff0c;从而实现高效的并发编程。 本章将介绍 Channel 的基本概念、用法、缓冲、关闭机制以及 select 的使用。 一、Channel…...

Java数值运算常见陷阱与规避方法

整数除法中的舍入问题 问题现象 当开发者预期进行浮点除法却误用整数除法时,会出现小数部分被截断的情况。典型错误模式如下: void process(int value) {double half = value / 2; // 整数除法导致截断// 使用half变量 }此时...

scikit-learn机器学习

# 同时添加如下代码, 这样每次环境(kernel)启动的时候只要运行下方代码即可: # Also add the following code, # so that every time the environment (kernel) starts, # just run the following code: import sys sys.path.append(/home/aistudio/external-libraries)机…...

AI语音助手的Python实现

引言 语音助手(如小爱同学、Siri)通过语音识别、自然语言处理(NLP)和语音合成技术,为用户提供直观、高效的交互体验。随着人工智能的普及,Python开发者可以利用开源库和AI模型,快速构建自定义语音助手。本文由浅入深,详细介绍如何使用Python开发AI语音助手,涵盖基础功…...

Kubernetes 网络模型深度解析:Pod IP 与 Service 的负载均衡机制,Service到底是什么?

Pod IP 的本质与特性 Pod IP 的定位 纯端点地址&#xff1a;Pod IP 是分配给 Pod 网络命名空间的真实 IP 地址&#xff08;如 10.244.1.2&#xff09;无特殊名称&#xff1a;在 Kubernetes 中&#xff0c;它通常被称为 “Pod IP” 或 “容器 IP”生命周期&#xff1a;与 Pod …...

基于stm32F10x 系列微控制器的智能电子琴(附完整项目源码、详细接线及讲解视频)

注&#xff1a;文章末尾网盘链接中自取成品使用演示视频、项目源码、项目文档 所用硬件&#xff1a;STM32F103C8T6、无源蜂鸣器、44矩阵键盘、flash存储模块、OLED显示屏、RGB三色灯、面包板、杜邦线、usb转ttl串口 stm32f103c8t6 面包板 …...

Selenium 查找页面元素的方式

Selenium 查找页面元素的方式 Selenium 提供了多种方法来查找网页中的元素&#xff0c;以下是主要的定位方式&#xff1a; 基本定位方式 通过ID定位 driver.find_element(By.ID, "element_id")通过Name定位 driver.find_element(By.NAME, "element_name"…...