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

文字的编码

 1 字符的编码方式

1.1 ASCII

        是“American Standard Code for Information Interchange”的缩写,美国信息交换标准代码。电脑毕竟是西方人发明的,他们常用字母就 26 个,区分大小写、加上标点符号也没超过 127 个,每个字符用一个字节来表示就足够了。**一个字节的 7 位就可以表示 128 个数值,在 ASCII 码中最高位永远是 0**。

 1.2 ANSI

        ASNI 是 ASCII 的扩展,向下包含 ASCII。对于 ASCII 字符仍以一个字节来表示,对于非 ASCII 字符则使用 2 字节来表示,**对于一个字符 bit7 是0则为ASCII, bit7 是1则为非ASCII,会用两个字节来表示一个非ASCII字符**。并没有固定的 ASNI 编码,它跟“本地化”(locale)密切相关。比如在中国大陆地区,**ANSI 的默认编码是 GB2312**;在港澳台地区默认编码是 BIG5。以数值“0xd0d6”为例,对于 GB2312 编码它表示“中”;对于 BIG5 编码它表示“笢”。所以对于 ANSI 编码的 TXT 文件,如果你打开它发现乱码,那么还得再次细分它的具体编码。
        使用 Notepad 打开后,选择不同的**编码**(或称为**字符集**),有不一样的显示,如下:

        这仅仅是在中国地区就出现这些不兼容的问题。对于不同国家,它们默认的ANSI 编码各不相同,所以同一个 TXT 文件在不同国家就很有可能出现乱码。根本的原理在于没有“统一的编码”,那解决方法自然就是使用“统一的编码”:UNICODE

1.3 UNICODAE

        在 ANSI 标准中,很多种文字都有自己的编码标准,汉字简体字有 GB2312、繁体字BIG5,这难免同一个数值对应不同字符。比如数值“0xd0d6”,对于GB2312 编码它表示“中”;对于 BIG5 编码它表示“笢”。这造成了使用 ANSI 编码保存的文件,不适合跨地区交流。
        UNICODE 编码就是解决这类问题:对于地球上任意一个字符,都给它一个唯一的数值。
        UNICODE 仍然向下兼容 ASCII,但是对于其他字符会有对应的数值,比如对于“中”、“笢”,它们的数值分别是:0x4e2d、0x7b22UNICODE 中的数值范围是 0x0000 至 0x10FFFF,有 1,114,111 即 100 多万个数值,可以表示 100 多万个字符,足够地球人使用了。

2.UNICODAE编码实现

        所谓编码实现,就是对于一个数值,怎么表示它。这很奇怪,数值还能怎么 表示?比如“中”的 UNICODE 值是 0x4e2d,在 TXT 文件中怎么表示 0x4e2d ? 直接写入 0x4e2d ?不行!
        比如在 TXT 文件中写入 2 字节数据“ 0x2d 0x4e” ,它可以用来表示“中” 字吗?不能!它们对应 ASCII 字符“ -N ”。
        问题的关键在于:怎么断字。在 TXT 文件中, 2 字节数据“ 0x2d 0x4e” 是作 为一个整体看待,还是拆成 2 部分看待?
        所以,需要用一定的技巧来表示数值,这就对应不同的编码实现。
怎么表示一个 UNICODE 数值?

2.1使用 3 个字节表示一个 UNICODE

        不,太浪费。UNICODE 的最大值是 0x10FFFF,那使用 3 个字节来表示一个 UNICODE 数
值?这当然是很省事的方法,但是会造成浪费,比如字符 A UNICOCDE 值是
0x41 ,难道也用“ 0x41 0x00 0x00 ”这 3 个字节来表示?

2.2 UCS-2 Little endian/UTF-16 LE  

        每个 UNICODE 值用 3 字节来表示有点浪费,那只用 2 字节呢?它可以表示 2^16=65536 个字符,全世界常用的字符都可以表示了。
        Little endian 表示小字节序,数值中权重低的字节放在前面,比如字符 “A 中”在 TXT 文件中的数值如下,其中的“ A ”使用“ 0x41 0x00 ”两字节表 示;“中”使用“0x2d 0x4e ”两字节表示。文件开头的“ 0xff 0xfe ”表示“ UTF- 16 LE”。

2.3UCS-2 Big endian/UTF-16 BE

        Big endian 表示大字节序,数值中权重低的字节放在后面,比如字符“ ab 中”在 TXT 文件中的数值如下,其中的“ A ”使用“ 0x00 0x41 ”两字节表示; “中”使用“0x4e 0x2d ”两字节表示。文件开头的“ 0xfe 0xff ”表示“ UTF- 16 BE”。

2.4UTF8

        在上面 2 种方法中,每一个 UNICODE 使用 2 字节来表示,这有 3 个缺点: 表示的字符数量有限、对于 ASCII 字符有空间浪费、如果文件中有某个字节丢失,这会使得后面所有字符都因为错位而无法显示。 使用 UTF8 可以解决上述所有问题。 UTF8 是变长的编码方法,有 2 UTF8
格式的文件:带有头部、不带头部。先举例,
        对于其中的 ASCII 字符,在 UTF8 文件中直接用其 ASCII 码来表示,比如上图中的 0x61 表示字符 a 0x62 表示字符 b 。上图中的 3 个字节“ 0xe4 0xb8 0xad”表示的数值是 0x4e2d ,对应“中”的 UNICODE 码。
        对于非 ASCII 字符,使用变长的编码:每一个字节的高位都自带长度信息。 请看图
        上图中,0xe4 的二进制是“ 11100100 ”,高位有 3 1 ,表示从当前字节起 有 3 字节参与表示 UNICODE
        0xb8 的二进制是“ 10111000 ”,高位有 1 1 ,表示从当前字节起有 1 字节 参与表示 UNICODE
        0xad 的二进制是“ 10101101 ”,高位有 1 1 ,表示从当前字节起有 1 字节参与表示 UNICODE
        除去高位的“1110 ”、“ 10 ”、“ 10 ”后,剩下的二进制数组合起来得到 “01001110001101 ”,它就是 0x4e2d ,即“中”的 UNICODE 值。
        使用 UTF8 编码时,即使 TXT 文件中丢失了某些数据,也只会影响到当前字符的显示,后面的字符不受影响。

相关文章:

文字的编码

1 字符的编码方式 1.1 ASCII 是“American Standard Code for Information Interchange”的缩写,美国信息交换标准代码。电脑毕竟是西方人发明的,他们常用字母就 26 个,区分大小写、加上标点符号也没超过 127 个,每个字符用一个字…...

21.9 Python 使用Selenium库

Selenium是一个自动化测试框架,主要用于Web应用程序的自动化测试。它可以模拟用户在浏览器中的操作,如打开网页、点击链接、填写表单等,并且可以在代码中实现条件判断、异常处理等功能。Selenium最初是用于测试Web应用程序的,但也…...

C++初阶2

目录 一,auto关键字 1-1,auto的使用 1-2,基于范围auto的for循环 二,nullptr的运用 三,C类的初步学习 3-1,类的引用 3-2,类的访问权限 3-3,类的使用 1,类中函数的…...

网络安全(黑客)—小白自学

1.网络安全是什么 网络安全可以基于攻击和防御视角来分类,我们经常听到的 “红队”、“渗透测试” 等就是研究攻击技术,而“蓝队”、“安全运营”、“安全运维”则研究防御技术。 2.网络安全市场 一、是市场需求量高; 二、则是发展相对成熟…...

在win10下,使用torchviz对深度学习网络模型进行可视化

目录 1. 安装 graphviz 和 torchviz 2.安装 graphviz.exe 3.实例测试 4.如果你的电脑还是无法画图,并且出现了下面的报错: 5.参考文章: 1. 安装 graphviz 和 torchviz 首先打开 Anaconda prompt 进入自己的 pytorch 环境(图中 pt 是我自…...

【自然语言处理】【长文本处理】RMT:能处理长度超过一百万token的Transformer

相关博客 【自然语言处理】【长文本处理】RMT:能处理长度超过一百万token的Transformer 【自然语言处理】【大模型】MPT模型结构源码解析(单机版) 【自然语言处理】【大模型】ChatGLM-6B模型结构代码解析(单机版) 【自然语言处理】【大模型】BLOOM模型结构源码解析(…...

交叉编译工具链(以STM32MP1为例)

1.什么是交叉编译工具链? 在一个系统上进行编译,在另一个系统上进行执行 2.STM32MP1交叉编译工具链 3.交叉编译器内容 4.两种工具链模式 5.两种链接模式 6.工具使用 注意:OpenSTLinux已经提供了编译框架,不需要命令行手工编译 …...

使用 Pyro 和 PyTorch 的贝叶斯神经网络

一、说明 构建图像分类器已成为新的“hello world”。还记得当你第一次接触 Python 时,你的打印“hello world”感觉很神奇吗?几个月前,当我按照PyTorch 官方教程并为自己构建了一个运行良好的简单分类器时,我也有同样的感觉。 我…...

How to install the console system of i-search rpa on Centos 7

How to install the console system of i-search rpa on Centos 7 1、 准备1.1 、查看磁盘分区状态1.2、上传文件1.2.1、添加上传目录1.2.2、上传安装包1.2.3、解压安装包1.2.4、查看安装包结构 1.3、安装依赖包1.3.1、基础依赖包1.3.2 相关依赖 1.4、关闭防火墙1.5、解除SeLin…...

sql--索引使用 ---覆盖索引

覆盖索引 Select 后接 * 走id索引才是最优,使用二级索引则需要回表(性能稍差) 前缀索引 Create index 索引名 on 表名( 字段名( n ) ) n数字 n代表提取这个字符串的n个构建索引 ??那么 n 为几性能是最好的呢&…...

系统平台同一网络下不同设备及进程的话题通讯--DDS数据分发服务中间件

系列文章目录 提示:这里可以添加系列文章的所有文章的目录,目录需要自己手动添加 TODO:写完再整理 文章目录 系列文章目录前言(1)中间件的介绍(2)DDS介绍(3)发布者(4)订阅者(5)idl文件(定义msg结构体)(6)QoS(Quality of Service)策略(7)DDS测试工具介绍(…...

轻量级 IDE 文本编辑器 Geany 发布 2.0

Geany 是功能强大、稳定、轻量的开发者专用文本编辑器,支持 Linux、Windows 和 macOS,内置支持 50 多种编程语言。 2005 年Geany 发布首个版本 0.1。上周四刚好是 Geany 诞生 18 周年纪念日,官方发布了 2.0 正式版以表庆祝。 下载地址&#…...

好用工具分享 | tmux 终端会话分离工具

目录 1 tmux的安装 2 tmux的基本操作 2.1 启动与退出 2.2 分离会话 2.3 查看会话 2.4 重接会话 2.5 杀死会话 2.6 切换会话 tmux是一个 terminal multiplexer(终端复用器),它可以启动一系列终端会话。 我们使用命令行时,…...

计算机网络重点概念整理-第三章 数据链路层【期末复习|考研复习】

计算机网络复习系列文章传送门: 第一章 计算机网络概述 第二章 物理层 第三章 数据链路层 第四章 网络层 第五章 传输层 第六章 应用层 第七章 网络安全 计算机网络整理-简称&缩写 文章目录 前言三、数据链路层3.1 数据链路层的基础概念3.2 帧3.2.1 帧的概念3.2…...

迅速的更改conda 环境的名称!

快速的做法是,复制之前创建的环境 重新命名 然后再删除旧的环境即可!!! 因为之前已经装过环境了,只是名字不叫A而是B,所以现在把B(old_name)改成A(new_name)。 具体方法如下: 1. 复制出来一份…...

基本微信小程序的外卖点餐订餐平台

项目介绍 餐饮行业是一个传统的行业。根据当前发展现状,网络信息时代的全面普及,餐饮行业也在发生着变化,单就点餐这一方面,利用手机点单正在逐步进入人们的生活。传统的点餐方式,不仅会耗费大量的人力、时间&#xf…...

十大排序算法(C语言)

参考文献 https://zhuanlan.zhihu.com/p/449501682 https://blog.csdn.net/mwj327720862/article/details/80498455?ops_request_misc%257B%2522request%255Fid%2522%253A%2522169837129516800222848165%2522%252C%2522scm%2522%253A%252220140713.130102334…%2522%257D&…...

iTransformer: INVERTED TRANSFORMERS ARE EFFECTIVE FOR TIME SERIES FORECASTING

#论文题目:ITRANSFORMER: INVERTED TRANSFORMERS ARE EFFECTIVE FOR TIME SERIES FORECASTING #论文地址:https://arxiv.org/abs/2310.06625 #论文源码开源地址:https://github.com/thuml/Time-Series-Library #论文所属会议:Mach…...

QT C++ AES字符串加密实现

使用方法&#xff1a;在.h中引入类库。然后在cpp中直接引入使用即可 类库的下载地址https://download.csdn.net/download/u012372365/88478671 具体代码&#xff1a; #include <QCoreApplication> #include <QTest> #ifdef __cplusplus #include "unit_tes…...

关于mysql json字段创建索引

前言&#xff1a; 创建索引的方式分为两种&#xff0c;CREATE index 和 ALTER TABLE&#xff1b; 被创建索引的关键字类型又分两种&#xff0c;数字&#xff08;UNSIGNED&#xff09;和字符串&#xff08;char(128)&#xff09; 一、给json对象属性param_value&#xff08;假…...

(LeetCode 每日一题) 3442. 奇偶频次间的最大差值 I (哈希、字符串)

题目&#xff1a;3442. 奇偶频次间的最大差值 I 思路 &#xff1a;哈希&#xff0c;时间复杂度0(n)。 用哈希表来记录每个字符串中字符的分布情况&#xff0c;哈希表这里用数组即可实现。 C版本&#xff1a; class Solution { public:int maxDifference(string s) {int a[26]…...

铭豹扩展坞 USB转网口 突然无法识别解决方法

当 USB 转网口扩展坞在一台笔记本上无法识别,但在其他电脑上正常工作时,问题通常出在笔记本自身或其与扩展坞的兼容性上。以下是系统化的定位思路和排查步骤,帮助你快速找到故障原因: 背景: 一个M-pard(铭豹)扩展坞的网卡突然无法识别了,扩展出来的三个USB接口正常。…...

MPNet:旋转机械轻量化故障诊断模型详解python代码复现

目录 一、问题背景与挑战 二、MPNet核心架构 2.1 多分支特征融合模块(MBFM) 2.2 残差注意力金字塔模块(RAPM) 2.2.1 空间金字塔注意力(SPA) 2.2.2 金字塔残差块(PRBlock) 2.3 分类器设计 三、关键技术突破 3.1 多尺度特征融合 3.2 轻量化设计策略 3.3 抗噪声…...

.Net框架,除了EF还有很多很多......

文章目录 1. 引言2. Dapper2.1 概述与设计原理2.2 核心功能与代码示例基本查询多映射查询存储过程调用 2.3 性能优化原理2.4 适用场景 3. NHibernate3.1 概述与架构设计3.2 映射配置示例Fluent映射XML映射 3.3 查询示例HQL查询Criteria APILINQ提供程序 3.4 高级特性3.5 适用场…...

Redis相关知识总结(缓存雪崩,缓存穿透,缓存击穿,Redis实现分布式锁,如何保持数据库和缓存一致)

文章目录 1.什么是Redis&#xff1f;2.为什么要使用redis作为mysql的缓存&#xff1f;3.什么是缓存雪崩、缓存穿透、缓存击穿&#xff1f;3.1缓存雪崩3.1.1 大量缓存同时过期3.1.2 Redis宕机 3.2 缓存击穿3.3 缓存穿透3.4 总结 4. 数据库和缓存如何保持一致性5. Redis实现分布式…...

大语言模型如何处理长文本?常用文本分割技术详解

为什么需要文本分割? 引言:为什么需要文本分割?一、基础文本分割方法1. 按段落分割(Paragraph Splitting)2. 按句子分割(Sentence Splitting)二、高级文本分割策略3. 重叠分割(Sliding Window)4. 递归分割(Recursive Splitting)三、生产级工具推荐5. 使用LangChain的…...

【项目实战】通过多模态+LangGraph实现PPT生成助手

PPT自动生成系统 基于LangGraph的PPT自动生成系统&#xff0c;可以将Markdown文档自动转换为PPT演示文稿。 功能特点 Markdown解析&#xff1a;自动解析Markdown文档结构PPT模板分析&#xff1a;分析PPT模板的布局和风格智能布局决策&#xff1a;匹配内容与合适的PPT布局自动…...

React19源码系列之 事件插件系统

事件类别 事件类型 定义 文档 Event Event 接口表示在 EventTarget 上出现的事件。 Event - Web API | MDN UIEvent UIEvent 接口表示简单的用户界面事件。 UIEvent - Web API | MDN KeyboardEvent KeyboardEvent 对象描述了用户与键盘的交互。 KeyboardEvent - Web…...

数据链路层的主要功能是什么

数据链路层&#xff08;OSI模型第2层&#xff09;的核心功能是在相邻网络节点&#xff08;如交换机、主机&#xff09;间提供可靠的数据帧传输服务&#xff0c;主要职责包括&#xff1a; &#x1f511; 核心功能详解&#xff1a; 帧封装与解封装 封装&#xff1a; 将网络层下发…...

Linux云原生安全:零信任架构与机密计算

Linux云原生安全&#xff1a;零信任架构与机密计算 构建坚不可摧的云原生防御体系 引言&#xff1a;云原生安全的范式革命 随着云原生技术的普及&#xff0c;安全边界正在从传统的网络边界向工作负载内部转移。Gartner预测&#xff0c;到2025年&#xff0c;零信任架构将成为超…...