当前位置: 首页 > 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;假…...

(十)学生端搭建

本次旨在将之前的已完成的部分功能进行拼装到学生端&#xff0c;同时完善学生端的构建。本次工作主要包括&#xff1a; 1.学生端整体界面布局 2.模拟考场与部分个人画像流程的串联 3.整体学生端逻辑 一、学生端 在主界面可以选择自己的用户角色 选择学生则进入学生登录界面…...

PHP和Node.js哪个更爽?

先说结论&#xff0c;rust完胜。 php&#xff1a;laravel&#xff0c;swoole&#xff0c;webman&#xff0c;最开始在苏宁的时候写了几年php&#xff0c;当时觉得php真的是世界上最好的语言&#xff0c;因为当初活在舒适圈里&#xff0c;不愿意跳出来&#xff0c;就好比当初活在…...

MVC 数据库

MVC 数据库 引言 在软件开发领域,Model-View-Controller(MVC)是一种流行的软件架构模式,它将应用程序分为三个核心组件:模型(Model)、视图(View)和控制器(Controller)。这种模式有助于提高代码的可维护性和可扩展性。本文将深入探讨MVC架构与数据库之间的关系,以…...

将对透视变换后的图像使用Otsu进行阈值化,来分离黑色和白色像素。这句话中的Otsu是什么意思?

Otsu 是一种自动阈值化方法&#xff0c;用于将图像分割为前景和背景。它通过最小化图像的类内方差或等价地最大化类间方差来选择最佳阈值。这种方法特别适用于图像的二值化处理&#xff0c;能够自动确定一个阈值&#xff0c;将图像中的像素分为黑色和白色两类。 Otsu 方法的原…...

华为OD机试-食堂供餐-二分法

import java.util.Arrays; import java.util.Scanner;public class DemoTest3 {public static void main(String[] args) {Scanner in new Scanner(System.in);// 注意 hasNext 和 hasNextLine 的区别while (in.hasNextLine()) { // 注意 while 处理多个 caseint a in.nextIn…...

现代密码学 | 椭圆曲线密码学—附py代码

Elliptic Curve Cryptography 椭圆曲线密码学&#xff08;ECC&#xff09;是一种基于有限域上椭圆曲线数学特性的公钥加密技术。其核心原理涉及椭圆曲线的代数性质、离散对数问题以及有限域上的运算。 椭圆曲线密码学是多种数字签名算法的基础&#xff0c;例如椭圆曲线数字签…...

JDK 17 新特性

#JDK 17 新特性 /**************** 文本块 *****************/ python/scala中早就支持&#xff0c;不稀奇 String json “”" { “name”: “Java”, “version”: 17 } “”"; /**************** Switch 语句 -> 表达式 *****************/ 挺好的&#xff…...

让AI看见世界:MCP协议与服务器的工作原理

让AI看见世界&#xff1a;MCP协议与服务器的工作原理 MCP&#xff08;Model Context Protocol&#xff09;是一种创新的通信协议&#xff0c;旨在让大型语言模型能够安全、高效地与外部资源进行交互。在AI技术快速发展的今天&#xff0c;MCP正成为连接AI与现实世界的重要桥梁。…...

Caliper 配置文件解析:config.yaml

Caliper 是一个区块链性能基准测试工具,用于评估不同区块链平台的性能。下面我将详细解释你提供的 fisco-bcos.json 文件结构,并说明它与 config.yaml 文件的关系。 fisco-bcos.json 文件解析 这个文件是针对 FISCO-BCOS 区块链网络的 Caliper 配置文件,主要包含以下几个部…...

【论文阅读28】-CNN-BiLSTM-Attention-(2024)

本文把滑坡位移序列拆开、筛优质因子&#xff0c;再用 CNN-BiLSTM-Attention 来动态预测每个子序列&#xff0c;最后重构出总位移&#xff0c;预测效果超越传统模型。 文章目录 1 引言2 方法2.1 位移时间序列加性模型2.2 变分模态分解 (VMD) 具体步骤2.3.1 样本熵&#xff08;S…...