谈谈字符编码间的区别与联系

YOLOv11模型改进-模块-引入空间池化模块StripPooling 解决遮挡、小目标 本文介绍了一种新的空间池化策略,称为,用于场景解析。结构:包括两个平行路径,分别进行水平和垂直方向的条带池化,然后通过1D卷积层进行特征调整。:结合了条带池化和传统的空间池化,分别用于捕捉长距离和短距离的依赖关系。作用捕捉长距离依赖:通过长条形的池化窗口,有效捕捉分布离散的区域之间的关系。避免不相关信息干扰:窄条形的池化窗口有助于捕捉局部上下文,防止不相关区域干扰标签预测。提高场景解析性能:在多个基准数据集上,证明了这种方法能够显著提升场景解析的效果。 阅读详情

写了这么久的code,无时无刻不与encode打交道,竟然没有搞清楚各字符编码间的区别与联系。今天特意抽了短时间,来补补。

1. ASCII码(American Standard Code for Information Interchange,美国信息交换标准代码)

在计算机中,所有的信息都是以二进制形式存储和表示的。每一个二进制位(bit)有0和1两种状态,因此8个bit(一个字节)就可以组合出256种状态。每一个状态对应一个字符,就可以表示256个字符。
ASCII码使用指定的7位或8位二进制数组合来表示128或256种可能的字符。标准ASCII码也叫基础ASCII码,使用7位二进制数来表示所有的大写和小写字母,数字0-9、标点符号,以及在美式英语中使用的特殊控制字符。0~31及127(共33个)是控制字符或通信专用字符,32~126(共95个)是字符,后128个称为扩展ASCII码。

2. ISO8859-1

ISO/IEC8859-1,又称Latin-1或“西欧语言”,是国际标准化组织内ISO/IEC 8859的第一个8位字符集。它以ASCII为基础,在空置的0xA0-0xFF的范围内,加入96个字母及符号,藉以供使用变音符号的拉丁字母语言使用。

3. GB2312/GBK/BIG5

对英语来说128个符号编码就够了,但是对其他语言来说,就是把”扩展字符集”填充了也远远满足不了需求,这就产生了多个字节表达一个符号情况。
简体中文常见的编码方式是GB2312,使用两个字节表示一个汉字,所以理论上最多可以表示256x256=65536个符号。台湾搞了一套繁体中文的编码方式BIG5。后来出现一套GB2312的扩展GBK,除了兼容GB2312外,它还能显示繁体中文,还有日文的假名。

4. Unicode编码

由于存在多种编码方式,因而同一个二进制数字可以被解释成不同的符号。要想打开一个文本文件,就必须知道其编码方式,否则用错误的编码方式解读,就会产生乱码。为了解决传统的字符编码方案的局限,Unicode就诞生了。Unicode是国际组织制定的可以容纳世界上所有文字和符号的字符编码方案,它为每种语言中的每个字符设定了统一并且唯一的二进制编码,以满足跨语言、跨平台进行文本转换、处理的要求。
  • Unicode的学名是"Universal Multiple-Octet Coded Character Set",简称为UCS。
  • Unicode编码系统可分为编码方式和实现方式两个层次。
    • UCS有两种编码方式:UCS-2和UCS-4。顾名思义,UCS-2就是用两个字节编码,UCS-4就是用4个字节(实际上只用了31位,最高位必须为0)编码。UCS-2有2^16=65536个码位,UCS-4有2^31=2147483648个码位。
    • UCS-4根据最高位为0的最高字节分成2^7=128个group。每个group再根据次高字节分为256个plane。每个plane根据第3个字节分为256行 (rows),每行包含256个cells。当然同一行的cells只是最后一个字节不同,其余都相同。group 0的plane 0被称作Basic Multilingual Plane, 即BMP。或者说UCS-4中,高两个字节为0的码位被称作BMP。将UCS-4的BMP去掉前面的两个零字节就得到了UCS-2。在UCS-2的两个字节前加上两个零字节,就得到了UCS-4的BMP。而目前的UCS-4规范中还没有任何字符被分配在BMP之外。
  • Unicode的实现方式不同于编码方式。一个字符的Unicode编码是确定的,但是在实际传输过程中,由于不同系统平台的设计不一定一致,以及出于节省空间的目的,对Unicode编码的实现方式有所不同。Unicode的实现方式称为Unicode转换格式(Unicode Transformation Format,简称为UTF)。

5. UTF-8

  • UTF-8是Unicode的实现方式之一;
  • 它是一种变长编码,需要1~4个8位长的码元来表示;
  • 兼容于ASCII编码。
UTF-8的编码规则很简单,只有二条:
1)对于单字节的符号,字节的第一位设为0,后面7位为这个符号的unicode码。因此对于英语字母,UTF-8编码和ASCII码是相同的。
2)对于n字节的符号(n>1),第一个字节的前n位都设为1,第n+1位设为0,后面字节的前两位一律设为10。剩下的没有提及的二进制位,全部为这个符号的unicode码。
下表总结了编码规则,字母x表示可用编码的位。

Unicode符号范围     | UTF-8编码方式
(十六进制)          | (二进制)
--------------------+-------------------------------------
0000 0000-0000 007F | 0xxxxxxx
0000 0080-0000 07FF | 110xxxxx 10xxxxxx
0000 0800-0000 FFFF | 1110xxxx 10xxxxxx 10xxxxxx
0001 0000-0010 FFFF | 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx

跟据上表,解读UTF-8编码非常简单。如果一个字节的第一位是0,则这个字节单独就是一个字符;如果第一位是1,则连续有多少个1,就表示当前字符占用多少个字节。
下面,还是以汉字"严"为例,演示如何实现UTF-8编码。
已知"严"的unicode是4E25(100111000100101),根据上表,可以发现4E25处在第三行的范围内(0000 0800-0000 FFFF),因此"严"的UTF-8编码需要三个字节,即格式是"1110xxxx 10xxxxxx 10xxxxxx"。然后,从"严"的最后一个二进制位开始,依次从后向前填入格式中的x,多出的位补0。这样就得到了,"严"的UTF-8编码是"11100100 10111000 10100101",转换成十六进制就是E4B8A5。

6. UTF-16

  • UTF-16也是Unicode的实现方式之一;
  • 它是一种变长编码,需要1~2个16位长的码元来表示;
  • UTF-16比起UTF-8,好处在于大部分字符都以固定长度的字节 (2字节) 储存,但UTF-16却无法兼容于ASCII编码。
在麦金塔计算机(Mac)机和个人计算机上,对字节顺序的理解是不一致的。这时同一字节流可能会被解释为不同内容,如某字符为十六进制编码4E59,按两个字节拆分为4E和59,在Mac上读取时是从低字节开始,那么在Mac OS会认为此4E59编码为594E,找到的字符为“奎”,而在Windows上从高字节开始读取,则编码为U+4E59的字符为“乙”。就是说在Windows下以UTF-16编码保存一个字符“乙”,在Mac OS环境下打开会显示成“奎”。此类情况说明UTF-16的编码顺序若不加以人为定义就可能发生混淆,于是在UTF-16编码实现方式中使用了大端序(Big-Endian,简写为UTF-16 BE)、小端序(Little-Endian,简写为UTF-16 LE)的概念,以及可附加的字节顺序记号解决方案,目前在PC机上的Windows系统和Linux系统对于UTF-16编码默认使用UTF-16 LE。

7. BOM(Byte order Mark)

  • 字节顺序标记BOM是位于码点U+FEFF的统一码字符的名称。当以UTF-16或UTF-32来将UCS/统一码字符所组成的字符串编码时,这个字符被用来标示其字节序。
  • 字节顺序标记被放置为文件或字符串流的第一个字符,如果接收者收到FEFF,就表明这个字节流是Big-Endian的;如果收到FFFE,就表明这个字节流是Little-Endian的。
  • UTF-8则没有字节顺序的议题。UTF-8编码过的字节顺序标记则被用来标示它是UTF-8的文件。它只用来标示一个UTF-8的文件,而不用来说明字节顺序。如果接收者收到以EF BB BF开头的字节流,就知道这是UTF-8编码了。
YOLO系列算法改进 | C3k2改进篇 | 融合MambaOut轻量化门控架构 | 纯卷积实现超越Mamba性能的同时兼顾极致轻量化与边缘部署效率 | CVPR 2025 YOLO系列算法改进 | C3k2改进篇 | 融合MambaOut轻量化门控架构 | 纯卷积实现超越Mamba性能的同时兼顾极致轻量化与边缘部署效率 | CVPR 2025 (以YOLOv26最新目标检测模型为基础,利用C3k2_MambaOut创新模块进行改进) 阅读详情

相关推荐

自动驾驶仿真(二)—— 基于PreScan与Simulink的联合仿真

自动驾驶仿真软件介绍二—— PreScan与Simulink联合仿真1. Prescan仿真软件2. Prescan与Simulink联合仿真2. 1 Prescan和matlab软件安装2. 2 联合仿真配置3. 联合仿真实例3.1 一辆不按法规行驶的小车3.2 另一辆的正常行驶的小车3.3 视觉辅助摄像机3.4 传感器检测4. 系列学习视频教程5. 参考学习的书目教材 上一篇博文简单介绍了Carsim与Simulink联合仿真,接着这篇就再继续简单介绍另一款自动驾驶仿真软件Prescan,并且简单做个P

zhudj08的博客 1万+

各种字符编码的关系和区别

英文用ASCII,简体中文用GB2312,繁体中文用BIG5; 而UNICODE(万国码,统一码)则是全世界统一使用的,它是为了解决传统的字符编码方案的局限而产生的,它为每种语言中的每个字符设定了统一并且唯一的二进制编码,以满足跨语言、跨平台进行文本转换、处理的要求。 UNICODE,GBK,BIG5和UTF-8区别:  简单来说,unicode,gbk和大五码就是编码的值,UTF-8是Un

cdw_FstLst的博客 1611

告别商业软件?实测用gnina(CNN打分版)做分子对接:从安装到跑通第一个案例

本文详细介绍了基于卷积神经网络(CNN)的开源分子对接工具gnina的安装与实战应用。从环境配置、编译安装到运行第一个COVID-19主蛋白酶抑制剂对接案例,全面解析了这款替代商业软件的强大功能,特别适合预算有限的研究团队进行药物发现和虚拟筛选。

weixin_42522320的博客 255

linux对c文件编码方式,C语言编码方式之ASCII、ANSI、Unicode

1、ASCIIASCII全称(American Standard Code for Information Interchange)美国信息交换标准代码,在计算机内部中8位二进制位组成1个字节(8(比特)bit=1(字节)byte),而ASCII的编码方式是把一个字节中的低7位用来编码,最高位也就是第8位留着不用(最高位一般为0,但有时也被用作一些通讯系统的奇偶校验位),从0x00一直编码到0x7...

weixin_42510914的博客 970

在mdk文件移植太多_XCubeClassB代码 的移植

前言ST在www.st.com官网上提供了针对IEC60730/IEC60335 ClassB认证的软件包。软件包分为三个,分别适用STM8,STM32(基于标准外设库)和STM32(基于HAL库):STM8-SafeCLASSB,STM32-CLASSB-SPL,X-CUBE-CLASSB。本文以X-CUBE-CLASSB为例介绍如何做代码的移植以及经常遇到的问题的解决办法。X-CUB...

weixin_28898707的博客 1832

2.2.1.3-移动平均线(python画k线、均线、5日线、买卖点图、python均线策略)

* 绘制一个k线图,也就是蜡烛图 * 计算5日均线值、10日均线值 * 在k线图上,绘制5日线和10日线图 * 在5日线上,绘制与10日线的交叉点(上穿、下穿时) python画k线、均线、5日线、买卖点图、python均线策略

KelvinLiu 3413

各种编码格式的区别与联系

字符编码、内码,汉字编码 字符必须编码后才能被计算机处理。计算机使用的缺省编码方式就是计算机的内码。早期的计算机使用7位的ASCII编码,为了处理汉字,程序员设计了用于简体中文的GB2312和用于繁体中文的big5。 GB2312(1980年)一共收录了7445个字符,包括6763个汉字和682个其它符号。汉字区的内码范围高字节从B0-F7,低字节从A1-FE,占用的码位是72*94=67...

xiaomin1991222的专栏 625

嵌入式Modbus协议面试题及参考答案

Modbus 协议采用主从模式进行通信,这种模式定义明确,便于在工业环境中实现设备之间的有序数据交互。在主从模式中,存在一个主站(Master)和多个从站(Slave)。主站通常是工业控制系统中的上位机,如 PLC、工控机等,它负责发起通信请求,控制整个通信过程。从站则是各种现场设备,如传感器、执行器等,它们接收主站的请求,并根据请求进行相应的操作,然后将结果返回给主站。主站的主要功能包括:发起数据读取或写入请求、控制通信的时序和流程、处理从站返回的数据。

大模型大数据攻城狮的专栏 2042

Unicode,ASCII和UTF-8 编码区别与联系(通俗易懂)

Unicode 我们知道unicode编码解决了ASCII码只支持英文数字等字符的单一问题; unicode编码目前普遍采用USC-2格式,该格式采用两个字节来编码一个汉字字符,所以两个字节最多可以表示2^16=65536个字符(一个字节为8位) 但是两个字节的容量要表示的是各国语言,而汉字字符----简体加繁体字就共有约7w个!,显然2个字节根本无法囊括所有汉字。因此也有采用USC-4格式,即4个字节来编码字符的情况,但目前为止普遍仍采用USC-2格式,毕竟常用几千个汉字足以满足所需! 同时字符编

qq_40979103的博客 1730

RK3588平台开发系列讲解(DMA篇)DMA engine使用

Linux 内核的 DMA 引擎提供了一组完整的接口,用于申请和释放 DMA 通道、准备 DMA 描述符、启动和控制 DMA 传输,以及同步和管理缓存。通过这些接口,内核能够高效地处理异步的 DMA 传输任务,减少 CPU 的干预,提高数据传输的效率。

内核笔记 1834

【WorkBuddy专栏53】我的WB为什么变聪明了——SOUL与USER配置管理实战(上)

【WorkBuddy专栏53】我的WB为什么变聪明了——SOUL与USER配置管理实战(上)

AI人人懂 244

几种计算机字符编码的区别与联系

最近有点心不在焉,好多考试,课本不想看,考研资料懒得翻,总不能白白浪费时间吧,不妨把折磨人好长时间的编码问题总结一下。3,2,1,,走起! Ascii和Ascii扩展字符集 很久以前,有一群人,他们决定用8个可以开合的晶体管来组合成不同的状态,以表示世界上的万物。他们看到8个开关状态是好的,于是他们把这称为“字节”。再后来,他们又做了一些可以处理这些字节的机器,机器开动了,可以用字节来组合

hzwcfy的博客 1094

瑞芯微RK3588平台YOLOv8Pose模型RKNN部署与C++优化实战:从模型转换到高效推理的全流程指南-附源码

错误码 | 原因 | 解决方案 || -1001 | ONNX算子不支持 | 升级RKNN SDK至最新版 || -2003 | 量化校准数据不足 | 增加校准图片至500张 || -3005 | 输入尺寸不匹配 | 固定模型输入尺寸为640x640 || 资源消耗 | CPU 35% | NPU 90% |

m0_64661770的博客 990

字符编码与字符集的区别

一、基本概念   1、什么是字符集: 字符集只是一个规则集合的名字, 字符集 = 字库表(character repertoire)、编码字符集(coded character set)、字符编码(character encoding form)。 2、字库表: 字库表是一个相当于所有可读或者可显示字符的数据库,字库表决定了整个字符集能够展现表示的所有字符的范围。 3、编码字符集

错觉 1万+

VC中sqlite的使用

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

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

WideString 还是 AnsiString ?谈谈字符编码。

http://www.delphibbs.com/delphibbs/dispq.asp?lid=3349991问题:WideString 还是 AnsiString ?谈谈字符编码。 ( 积分:0, 回复:12, 阅读:242 )分类:编程手记 ( 版主:DNChen, cAkk )

redeastfan的专栏 930

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

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

谈谈Windows程序中的字符编码

谈谈Windows程序中的字符编码写这篇文章的起因是这么一个问题:我们在使用和安装Windows程序时,有时会看到以“2052”、“1033”这些数字为名的文件夹,这些数字似乎和字符集有关,但它们究竟是什么意思呢?研究这个问题的同时,又会遇到其它问题。我们会谈到Windows的内部架构、Win32 API的A/W函数、Locale、ANSI代码页、与字符编码有关的编译参数、MBCS和Uni

leona1101的专栏 803

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

Python常见字符编码间的转换教程

Python常见字符编码间的转换教程

Python热爱者的博客 2702

五分钟快速理解字符集与字符编码的区别

字符集 字符集,也称作字符编码方案,是为字符集合中每一个字符分配一个唯一ID的编码字符集.包括了Unicode,ASCII,ANSI等字符集。 Unicode字符集 — 所有字符组成的字符集 国际组织制定的可以容纳世界上所有文字和符号的字符编码方案。如果全世界每一个符号都给予一个独一无二的编码,那么乱码问题就会消失。这就是Unicode,就像它的名字都表示的,这是一种所有符号的编码。 ASCII字...

Hibiki's Ending 1339

Python2和3字符编码的区别

文章目录Python2和3字符编码的区别一、字符编码应用之Python1.1 执行Python程序的三个阶段二、Python2与Python3字符串类型的区别2.1 Python22.1.1 str类型7.0.2 Unicode类型9.1 Python3总而言之 Python2和3字符编码的区别 一、字符编码应用之Python 1.1 执行Python程序的三个阶段 Python test.py(...

Allen 1555

字节、字符与字符编码的区别与联系

字节、字符与字符编码的区别与联系

不积跬步无以至千里 2426

字符集与字符编码

1. 字符集与字符编码 参考: 字符集和URL的编码与解码 字符集和字符编码(Charset & Encoding) 全网最全面、全详细的编码、解码知识!!! 字符编码的概念(UTF-8、UTF-16、UTF-32都是什么鬼) 大端与小端字节数据详解 1.1 编码基础知识 1.1.1 编码 & 解码 计算机只认识0和1组成的二进制序列,因此任何文件中的内容要想被计算机识别或者想存储在计算机上都需要转换为二进制序列。 编码:将字符转换为对应的二进制序列 解码:将二进制序列转换为对应的字符

greenyellowleave的博客 1392

Python中的字符串与字符编码

本节内容: 前言 相关概念 Python中的默认编码 Python2与Python3中对字符串的支持 字符编码转换 一、前言 Python中的字符编码是个老生常谈的话题,同行们都写过很多这方面的文章。有的人云亦云,也有的写得很深入。近日看到某知名培训机构的教学视频中再次谈及此问题,讲解的还是不尽人意,所以才想写这篇文字。一方面,梳理一下相关知识,另一方面,希望给其他人些许帮助。 P...

Gordennizaicunzai的博客 339

字符编码大揭秘:常见的字符编码及其区别

字符编码(Character Encoding)是将字符集中的字符映射为二进制数据的过程。简单来说,就是将人类可读的文本转换为计算机可处理的二进制数据。不同的字符编码标准采用不同的映射规则,因此了解这些规则对于正确处理文本数据至关重要。通过深入探讨常见的字符编码及其区别,我们发现不同的编码标准各有优缺点,适用于不同的应用场景。了解这些编码标准的工作原理和特点,有助于我们更好地处理文本数据,编写出更高效、更健壮的代码。希望本文能帮助你更好地理解字符编码,并在实际编程中做出更合适的选择。

xycxycooo的博客 725
下一篇: Git 常用命令
go2shell
博客等级 码龄12年 45粉丝 43原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值