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

ByteArrayInputStream和DataInputStream的源码分析和使用方法详细分析前言)UTF-8 编码规则

UTF-8(Unicode Transformation Format-8-bit)是一种针对 Unicode 的可变长度字符编码,通过 1 至 4 个字节表示一个字符,完美兼容 ASCII 编码,同时支持全球所有语言的字符(包括中文、日文、韩文、阿拉伯语等)。其核心设计思想是通过首字节的标识符确定字符的字节长度,后续字节以固定格式标记,确保编码的唯一性和可解析性。
UTF-8 的编码规则基于 Unicode 码点的范围,通过首字节的前几位(前缀码)标识字符的字节长度,后续字节以 10 开头作为延续标记。具体规则如下:

Unicode码点范围对应UTF-8编码时占用的字节数用UTF-8编码时首字节的格式用UTF-8编码时后续字节格式示例字符UTF-8 编码
U+0000 ~ U+007F10xxxxxxxA0x41
U+0080 ~ U+07FF2110xxxxx10xxxxxx(10xxxxxx * 1)é0xC3 0xA9
U+0800 ~ U+FFFF31110xxxx10xxxxxx 10xxxxxx (10xxxxxx * 2)0xE4 0xB8 0xAD
U+10000 ~ U+10FFFF411110xxx10xxxxxx 10xxxxxx 10xxxxxx(10xxxxxx * 3)𠮷0xF0 0xA0 0xAE 0xB7
一、编码步骤详解
1.1、中文编码解码步骤
1.1.1、汉字“中”的编码步骤

以汉字“中”(Unicode 码点 U+4E2D)为例,其 UTF-8 编码过程如下:
①、确定编码模板,由于 U+4E2D 属于 U+0800 ~ U+FFFF 范围,需使用 3 字节模板:

1110xxxx 10xxxxxx 10xxxxxx

②、码点转二进制,U+4E2D 的二进制表示为

0100 1110 0010 1101(高位补零至 16 位)。

③、填充到步骤①中的编码模板中
a、第一个字节:取0100填充1110xxxx ,填充后的结果为 1110 0100(0xE4)。
b、第二个字节:取111000填充10xxxxxx ,填充后的结果为 1011 1000(0xB8)。
c、第三个字节:取 101101填充10xxxxxx ,填充后的结果为 1010 1101(0xAD)。
④、组合步骤③中的所有的填充结果,最终,汉子“中” 的 UTF-8 编码为 0xE4 0xB8 0xAD。

1.1.2、汉字"中"的解码步骤

汉字“中”解码过程和编码过程相反,先根据首字节的前缀码确定字节数,再提取有效位组合成 Unicode 码点,具体步骤如下:
①、首字节 0xE4 以 1110 开头,说明是 3 字节编码模板。
②、分别从3个字节中提取各自的有效位,总共提取3次
a、从第一个字节 1110 0100(0xE4)中取 0100。
b、从第二个字节1011 1000(0xB8) 中取 111000。
c、从第三个字节1010 1101(0xAD)中取 101101。
③、依次组合步骤②中a、b、c提取的码点,拼接成有效位:

0100 1110 0010 1101 → U+4E2D(在Unicode 码点中表示"中")。

1.2、英文编码解码步骤
1.2.1、英文"A"的编码步骤

以英文字母"A"(Unicode 码点 U+0041)为例,其 UTF-8 编码过程如下:
①、确定编码模板,由于 U+0041 属于 U+0000 ~ U+007F 范围,需使用 1 字节模板:

0xxxxxxx

②、码点转二进制,U+0041 的二进制表示为

0100 0001(高位补零至 8 位)。

③、填充到步骤①中的编码模板中
a、第一个字节:取100 0001填充0xxxxxxx,填充后的结果为 0100 0001(0x41)。
④、组合步骤③中的所有的填充结果,最终,英文字母"A" 的 UTF-8 编码为0x41。

1.2.2、英文"A"的解码步骤

英文"A"解码过程和编码过程相反,先根据首字节的前缀码确定字节数,再提取有效位组合成 Unicode 码点,具体步骤如下:
①、首字节 0x41 以 0 开头,说明是 1 字节编码模板。
②、只从唯一的1个字节中提取有效位,只提取1次
a、从第一个字节 0100 0001(0x41)中取 100 0001。
③、组合步骤②中a提取的码点,拼接成有效位:

0100 0001 → U+0041(高位补零至 8 位,在Unicode 码点中表示"A")。
1.3、中文中的特殊字符é编码解码步骤
1.3.1、中文中的特殊字符"é"的编码步骤

以中文中的特殊字符"é"(Unicode 码点 U+00E9)为例,其 UTF-8 编码过程如下:
①、确定编码模板,由于 U+00E9属于 U+0080 ~ U+07FF 范围,需使用 2字节模板:

110xxxxx 10xxxxxx

②、码点转二进制,U+00E9 的二进制表示为

0000 0000 1110 1001(高位补零至 16 位)。

③、填充到步骤①中的编码模板中
a、第一个字节:取000 11填充110xxxxx,填充后的结果为 1100 0011(0xC3);
b、第二个字节:取10 1001填充10xxxxxx,填充后的结果为 1010 1001(0xA9);
④、组合步骤③中的所有的填充结果,最终,中文中的特殊字符"é"的 UTF-8 编码为0xC3 0xA9。

1.3.2、中文中的特殊字符"é"的解码步骤

中文中的特殊字符"é"解码过程和编码过程相反,先根据首字节的前缀码确定字节数,再提取有效位组合成 Unicode 码点,具体步骤如下:

http://www.jsqmd.com/news/1094078/

相关文章:

  • 621万vs697万!2026年结婚人数预测你信哪个?
  • 世界模型的PopLang底座:当物理AI遇上ibbot智体机灵,每台手机都能成为“认知推演沙盘”
  • Python列表去重的20种实现方式
  • 2026年门店SaaS系统开发服务商测评推荐:适配本地生活服务的优质方案解析
  • 单台Nginx部署多个前端项目:IP路径区分 \+ 域名区分完整实战
  • 罗德与施瓦茨(RS)的矢量网络分析仪应用场景
  • 时间管理:番茄工作法在编程中的应用
  • title: Claude Code 教程:从零搭建 AI 驱动的开发工作流(基于 Google 新版 SDLC 白皮书)
  • 计算机Java毕设实战-基于 SpringBoot 的老年人健康管理系统的设计与实现【完整源码+LW+部署说明+演示视频,全bao一条龙等】
  • 示波器抓 I2C 时序:如何一眼看出 ACK 没拉低?
  • Sentinel 微服务学习笔记
  • Windows 局域网文件共享实战:解决“账户被禁用“与“网络访问拒绝“问题
  • React Fiber 调度架构解析
  • 工业计算机类型、功能应用及选型指南
  • 华为交换机 SNMPv3 Trap 配置与验证指南
  • CasaOS:基于Docker的个人云操作系统安装与实战指南
  • Claude Code 2026 安装指南 并改调用DeepSeek模型
  • 吉阳区正宗椰子鸡推荐|符合海南本土特色的宝藏门店
  • Linux:进程
  • ZW3D二次开发_工程图_获取/设置参考是否隐藏消隐线
  • SpringBoot 整合 MinIO 实现文件存储——私有化 OSS 方案
  • Java synchronized 与 ReentrantLock 对比分析
  • 《AI抢产能致车规存储缺货?欣芯半导体给出eMMC/UFS“供应韧性”破局与选型指南》
  • Solo DSP数据集成模块的架构设计
  • MCP协议与Playwright结合:实现零代码浏览器自动化
  • 商用级云PACS源码,云影像源码,B/S 架构 DICOM 标准,HIS 双向对接、Redis 缓存开箱即用
  • Versal GTM(1):收发器概览
  • 2026去水印不破坏原图的方法!电脑手机在线无痕去水印工具+PS教程
  • 如何甄选靠谱展厅设计公司:从效果到落地的实战指南
  • 实测拆解!Paperxie智能写作,解锁毕业论文标准化高效创作方式