一文读懂UTF-8的编码规则

news2024/11/15 11:40:03

之前写过一篇文章“一文彻底搞懂计算机中文编码”里面只是介绍了GB2312编码知识,关于utf8没有涉及到,经过查询资料发现utf8是对unicode的一种可变长度字符编码,所以再记录一下。
在这里插入图片描述
现在国家对于信息技术中文编码字符集制定的标准是《GB 18030-2022 信息技术 中文编码字符集》

首先需要明确GB 18030是字符集,定义计算机系统中需要显示哪些中文,UTF-8是一种编码方式,定义计算机系统中怎样去显示。
我们以中文“爸”为例,看GB 18030中怎么定义的,如下图:
在这里插入图片描述
B0:第一字节
D:第二字节高位
6:第二字节低位
爸:字形
7238(16进制):GB/T 13000代码位置

GB13000 全称:国家标准GB13000:2010《信息技术 通用多八位编码字符集(UCS)第一部分:体系结构与基本多文种平面》,此标准等同采用国际标准ISO/IEC 10646-2003,IDT《信息技术 通用多八位编码字符集(UCS)第一部分:体系结构与基本多文种平面》。Unicode 标准在基本平面上与GB 13000保持一致。采纳UTF-16方案作为未来实现01到0F共15个辅助平面的方式。其它方面与GB 13000基本一致。
为了便于多个文种的同时处理,国际标准化组织下属编码字符集工作组研制了新的编码字符集标准,ISO/IEC 10646。该标准第一次颁布是在1993年,当时只颁布了其第一部分,即ISO/IEC 10646.1: 1993,中国相应的国家标准是GB 13000.1-93《信息技术 通用多八位编码字符集(UCS) 第一部分:体系结构与基本多文种平面》。制定这个标准的目的是对世界上的所有文字统一编码,以实现世界上所有文字在计算机上的统一处理。

UTF-8编码规则如下:
Utf8分成单字节、双字节、三字节、四字节模式,具体如下:
0xxxxxxx(7bit)
110xxxxx 10xxxxxx(11bit)
1110xxxx 10xxxxxx 10xxxxxx(16bit)中文
11110xxx 10xxxxxx 10xxxxxx 10xxxxxx(21bit)

中文是使用三字节模式,所以中文“爸”转换如下:
7238二进制:0111 0010 0011 1000
按照三字节模式编码:1110 0111 1000 1000 1011 1000
转换十六进制后:E 7 8 8 B 8

程序验证:

public class GBKTest {
    public static void main(String[] args) throws UnsupportedEncodingException {
        String nh = "爸";

        byte[] bs = nh.getBytes("utf-8");
        for (int i=0;i<bs.length;i++) {
            int n = bs[i];
            if (n < 0)
                n += 256;
            int d1 = n / 16;
            int d2 = n % 16;
            System.out.println(hexDigits[d1] + " " + hexDigits[d2]);
        }

    }

    private static final String hexDigits[] = { "0", "1", "2", "3", "4", "5",
            "6", "7", "8", "9", "a", "b", "c", "d", "e", "f" };
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1060930.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

yolov8封装进入ROS系统

一,yolov8的环境配置工作 说明:需要相关工程全部源码的可私聊博主或评论留言 配置工作可以参考我的一篇关于yolov8环境配置的博客。 需要说明的是:直接使用: pip install ultralytics 会导致后面对于网络结构的改进无法运行。所以如果需要对网络结构进行改进的同学,不要使用…

学信息系统项目管理师第4版系列17_干系人管理

1. 项目经理和团队管理干系人的能力决定着项目的成败 2. 干系人满意度应作为项目目标加以识别和管理 3. 发展趋势和新兴实践 3.1. 识别所有干系人&#xff0c;而非在限定范围内 3.2. 确保所有团队成员都涉及引导干系人参与的活 3.3. 定期审查干系人群体&#xff0c;可与单…

互联网Java工程师面试题·Dubbo篇·第一弹

目录 1、为什么要用 Dubbo&#xff1f; 2、Dubbo 的整体架构设计有哪些分层? 3、默认使用的是什么通信框架&#xff0c;还有别的选择吗? 4、服务调用是阻塞的吗&#xff1f; 5、一般使用什么注册中心&#xff1f;还有别的选择吗&#xff1f; 6、默认使用什么序列化框架&…

CUDA+cuDNN+TensorRT 配置避坑指南

深度学习模型加速部署的环境配置&#xff0c;需要在本地安装NVIDIA的一些工具链和软件包&#xff0c;这是一个些许繁琐的过程&#xff0c;而且一步错&#xff0c;步步错。笔者将会根据自己的经验来提供建议&#xff0c;减少踩坑几率。当然可以完全按照官方教程操作&#xff0c;…

新手学习笔记-----⽂件操作

目录 1. 为什么使⽤⽂件&#xff1f; 2. 什么是⽂件&#xff1f; 2.1 程序⽂件 2.2 数据⽂件 2.3 ⽂件名 3. ⼆进制⽂件和⽂本⽂件&#xff1f; 4. ⽂件的打开和关闭 4.1 流和标准流 4.1.1 流 4.1.2 标准流 4.2 ⽂件指针 4.3 ⽂件的打开和关闭 5. ⽂件的顺序读写 …

多层神经网络和激活函数

多层神经网络的结构 多层神经网络就是由单层神经网络进行叠加之后得到的&#xff0c;所以就形成了层的概念&#xff0c;常见的多层神经网络有如下结构&#xff1a; 1&#xff09;输入层&#xff08;Input layer&#xff09;&#xff0c;众多神经元&#xff08;Neuron&#xff…

点云处理开发测试题目

点云处理开发测试题目 文件夹中有一个场景的三块点云数据&#xff0c;单位mm。是一个桌子上放了一个纸箱&#xff0c;纸箱上有四个圆孔。需要做的内容是&#xff1a; 1. 绘制出最小外接立方体&#xff0c;得到纸箱的长宽高值。注意高度计算是纸箱平面到桌子平面的距离。 2. 计…

【每日一题】买卖股票的最佳时机 IV

文章目录 Tag题目来源题目解读解题思路方法一&#xff1a;动态规划 写在最后 Tag 【动态规划】【数组】【2023-10-04】 题目来源 188. 买卖股票的最佳时机 IV 题目解读 本题与 121. 买卖股票的最佳时机、122. 买卖股票的最佳时机 II、123. 买卖股票的最佳时机 III 题意目的一…

一文拿捏Spring之IOC、循环依赖、Spring的设计模式

1.IOC(控制反转)与DI(依赖注入) &#x1f31f;面试题(IOC-DI): IOC控制反转是一种实现对象解耦的思想。传统情况下是采用new的方式来创建对象&#xff0c;这个对象是由我们来直接控制的&#xff0c;但是有了IOC后&#xff0c;我们可以在IOC运行期间通过DI动态的将依赖的对象进…

嵌入式系统设计与应用---ARM处理器体系结构(学习笔记)

ARM处理器概述 Cortex-A8处理器工作模式 ps&#xff1a;除用户模式以外的其他模式被称为非用户模式或特权模式&#xff1b;除用户模式及系统模式以外的其他模式可称为异常模式 Cortex-A8存储器管理​​​​​​​ ARM的基本数据类型 字节&#xff08;Byte&#xff09;&#…

激活函数介绍

介绍 神经网络当中的激活函数用来提升网络的非线性&#xff0c;以增强网络的表征能力。它有这样几个特点&#xff1a;有界&#xff0c;必须为非常数&#xff0c;单调递增且连续可求导。我们常用的有sigmoid或者tanh&#xff0c;但我们都知道这两个都存在一定的缺点&#xff0c…

第十五章 类和对象——友元

生活中你的家有客厅(Public)&#xff0c;有你的卧室(Private) 客厅所有来的客人都可以进去&#xff0c;但是你的卧室是私有的&#xff0c;也就是说只有你能进去 但是呢&#xff0c;你也可以允许你的好闺蜜好基友进去。 在程序里&#xff0c;有些私有属性 也想让类外特殊的一些…

springboot配置静态资源访问

使用springboot搭建web项目的时候&#xff0c;springboot默认从static目录访问静态资源 例如我们写一个html,然后去访问这个html 内容《你好&#xff01;》 然后运行项目 运行成功&#xff0c;此时我用的端口号是8089 然后去浏览器里访问hello.html http://localhost:8089/…

力扣 -- 879. 盈利计划(二维费用的背包问题)

解题步骤&#xff1a; 参考代码&#xff1a; 未优化的代码&#xff1a; class Solution { public:int profitableSchemes(int n, int minProfit, vector<int>& group, vector<int>& profit) {//计划数int lengroup.size();//每一维都多开一行空间vector&…

查询表中指定列数据

MySQL从小白到总裁完整教程目录:https://blog.csdn.net/weixin_67859959/article/details/129334507?spm1001.2014.3001.5502 语法格式: select 列名1, 列名2, ..., 列名n from 表名; 想要查多少列就写多少个列名,不需要看的不要写就行了 案例&#xff1a;查询emp表中&…

Spring面试题学习: 单例Bean是单例模式吗?

单例Bean是单例模式吗 学习背景答案扩展知识单例模式Spring BeanJava Bean单例Bean 个人评价我的回答 学习背景 想换工作. 学习记录, 算是一个输出. 答案 通常来说, 单例模式是指在一个JVM中, 一个类只能构造出一个对象. 有很多方法来实现单例模式, 比如饿汉模式. 但是我们通…

使用Pytorch构建神经网络

构建神经网络的典型流程 定义一个拥有可学习参数的神经网络遍历训练数据集处理输入数据使其流经神经网络计算损失值将网络参数的梯度进行反向传播以一定的规则更新网络的权重 我们首先定义一个Pytorch实现的神经网络: # 导入若干工具包 import torch import torch.nn as nn …

【vue】element强制刷新el-carousel的dom:

文章目录 一、问题:二、分析:三、解决: 一、问题: 二、分析: el-carouse里面的数据是最新的&#xff0c;但dom却是前一个的数据 注意&#xff1a;使用了this.$forceUpdate();或this.$set(xx,xx);&#xff0c;没有效果 三、解决: :key"new Date().getTime()"

透明度和透明贴图制作玻璃水杯

1、什么是透明度 模型透明度是指一个物体或模型在呈现时的透明程度。它决定了物体在渲染时&#xff0c;是否显示其后面的物体或背景。 在图形渲染中&#xff0c;透明度通常以0到1之间的值表示。值为0表示完全透明&#xff0c;即物体不可见&#xff0c;背景或其他物体完全穿透…

机器学习笔记(一)

1.线性回归模型 2. 损失函数 3.梯度下降算法 多元特征的线性回归 当有多个影响因素的时候,公式可以改写为: 当有多个影响因素的时候为了方便计算,可以使用 Numpy下面的点积方法, np.dot(w,x) 最后再加个b 就省略了很多书写步骤,这叫做矢量化 多元回归的梯度下降 左边是一…