Files
test-repo/docs/zh-cn/appendix/1-computer-fundamentals/data-encoding-storage.md
T
sanbuphy 3af119a598 feat(appendix): 添加多个交互式演示组件,完善 AI/Infra 等章节内容
- 新增 Vibe Coding 全栈相关演示组件 (DeveloperSkillShift, FrontendTriad, BackendCore 等)
- 新增 RAG 相关组件 (RAGPipeline, ChunkingStrategy, Retrieval 等)
- 新增 Embedding & Vector 相关组件 (EmbeddingConcept, VectorSimilarity 等)
- 新增 AI Native App 设计组件 (AINativeArch, PromptDesign 等)
- 新增 Infrastructure as Code 组件 (IaCConcept, TerraformWorkflow 等)
- 新增 DNS & HTTPS 演示组件 (DnsResolution, HttpsHandshake 等)
- 新增 Model Finetuning 组件 (FinetuningPipeline 等)
- 更新多个章节的 markdown 内容,集成交互式演示
2026-02-24 18:22:58 +08:00

251 lines
14 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 什么是数据的编码与传输?
::: tip 前言
当你给朋友发一张照片、发一条微信,或者下载一个几 GB 的游戏时,这些信息是怎么穿过大半个地球、完好无损地出现在你的屏幕上的?本章节会围绕一个经常困扰新手的问题展开:**为什么我收到的文件变成了乱码?** 顺着这个问题,我们将彻底揭开计算机底层最核心的三大基石:**编码、存储与传输**。
:::
**这篇文章会带你学什么?**
学完这章后,你将获得:
- **乱码排查能力**:遇到"文件打开是乱码"时,能从编码角度分析原因,而不是简单认为"文件坏了"
- **跨平台意识**:处理数据交换时,知道为什么要关注编码格式和字节序
- **编码世界观**:理解计算机如何用 0 和 1 表示世间万物——从文字到图像到复杂对象
- **后续学习基础**:为网络协议、文件格式、序列化技术打下基础
| 章节 | 内容 | 核心概念 |
|-----|------|---------|
| **第 1 章** | 字符编码 | ASCII、UTF-8、GBK |
| **第 2 章** | 数据存储 | 二进制、字节序 |
| **第 3 章** | 数据传输 | 序列化、压缩 |
在开始之前,我们需要先明确一个经常被新手忽略的物理事实:
计算机其实极其“死板”。它不认识汉字,不认得色彩,也听不懂周杰伦的歌。
它的底层全是由无数个微小的半导体开关组成的,**它只能一次又一次地判断“通电(1)”或“断电(0)”**。
既然计算机只认识 0 和 1,那我们怎么让它显示五颜六色的图片和复杂的文字呢?
答案就是:**规定一本“密码本”**。
我们和计算机约定好:如果底层发来 `01000001` 这串微小的电信号,它在屏幕上就专门画出英文字母 `A`;如果发来另外一串信号,就专门显示红色。
这个**制定并使用密码本进行来回翻译的过程,就叫做“编码(Encoding)”**。
明白了“计算机里的一切本质上都是密码”这个逻辑起点,你就能瞬间明白日常最容易碰到的一个见鬼现象——乱码,到底是怎么产生的了。
---
## 0. 引言:为什么文件会变成“天书”?
想象一下,你收到一份重要的同事发来的文件,双击打开一看,里面全是类似“浣犲ソ”或“ä½ å¥½”这种奇怪的文字。
直觉上,你肯定觉得:是不是文件在发送的过程中损坏了?是不是丢包了?
但实际上,绝大多数所谓的“文件损坏”,真相只有一个——**你的电脑“没找对阅读规则”**。
👇 **动手点点看**
试着在下方的模拟器里,切换不同的“解码密码本”,来读取同一串底层的电信号字节。
<GarbledTextDemo />
**🎯 核心领悟:没对齐的密码本**
字节(0和1序列)本身是没有绝对意义的,是人类制定的**「编码规则」**赋予了它们意义。
这就像是一串摩斯密码“滴滴答”,如果你用中文电报密码本去查,它是一个字;如果用美军密码本去查,它是另一个字。
**发件人用 UTF-8 密码本把汉字翻译成了数字发给你,你如果硬要用 GBK 密码本去解读这些数字,拼出来的当然全是乱码。**
要彻底搞懂为什么没损坏的数据会变乱码,我们需要了解数据处理的完整链条。即数据的“一生”:**编码**、**存储**、**传输**。
---
## 1. 什么是数据编码?(把万物变成数字)
简单来说:
> **数据编码(Encoding)**,就是建立一本“双向翻译词典”,把现实世界中复杂多样的信息(文字、色彩、声音),强制映射成计算机能理解的 0 和 1 的规则。
### 1.1 把文字变成数字:从 ASCII 到万国码
我们每天在微信里打字,每按下一个键,计算机其实暗中都在做一件事:**查表替换**。
**第一阶段:ASCII 的小天地**
发明电脑初期,美国人觉得世界上只有 26 个英文字母、数字和一些标点符号,于是制定了一本很薄的密码本叫做 **ASCII 码**
它只规定了 128 个符号,比如规定数字 `65` 代表大写字母 `A`。由于字符很少,**1 个字节(Byte,等于 8 个比特位 Bit)** 的空间能容纳 256 种变化,绰绰有余。
**第二阶段:群雄割据的战国时代**
但后来,电脑走向了世界。大家发现:**汉字有几万个,日本还有假名,光靠 1 个字节根本装不下!**
于是,中国搞了 GBK 密码本(用 2 个字节存一个汉字),日本搞了 Shift_JIS……世界陷入了混乱。你在中国做好的网页,发给美国客户,他们电脑里没有 GBK 词典,打开全是一堆乱码。
**第三阶段:天下一统的 Unicode(万国码)**
最后,计算机界的大神们坐在一起商量:“大家别各玩各的了,我们做一本收录地球上所有符号的超级大字典吧!”这就是大名鼎鼎的 **Unicode(万国码)**。它给世界上每一个文字、甚至你常用的每个 Emoji 表情都分配了一个独一无二的编号。
而你经常听到的 **UTF-8**,就是 Unicode 字典目前最流行的一套“存储规则”。它最聪明的点在于它是**变长**的:遇到英文只用 1 个字节,遇到中文用 3 个字节,非常节省空间。
👇 **动手点点看**
在下面的输入框里随便打几个中英文或 Emoji(比如:`你好 Hello 🎉`),看看计算机底层是怎么“查表”占用空间的。
<CharacterEncodingExplorer />
**💡 惊奇发现**
- 一个英文字母在 UTF-8 里只占 **1 个字节**
- 一个普通汉字通常占 **3 个字节**
- 一个 Emoji 表情(🎉),竟然需要 **4 个字节**
> **冷知识**:为什么很多人觉得发同样长度的短信,纯英文能发好长一段,纯中文只能发几句?因为在底层的电信号序列里,中文的物理尺寸足足是英文的 3 倍大!
### 1.2 颜色和声音怎么变数字?
文字可以查表,那蒙娜丽莎的微笑、周杰伦的歌声怎么变成 0 和 1 呢?
方法同样是:**切割与映射**。
* **图片的编码**
把一张照片无限放大,它其实是由几百万个发光的小方块(像素)组成的。我们只要规定每个颜色的编号(比如 `#FF0000` 代表红色),然后把几百万个方块的编号存下来,照片就变成了数字。
👇 **动手点点看**:悬停在左侧画布的小格子上,看看图像颜色是怎么映射成十六进制代码的。
<ImageEncodingDemo />
* **声音的编码**
声音本质是空气的震荡波。如果我们每秒去测量这个波浪的高度 44100 次(采样),记录下代表高度的数值。连续存下来,连通的声波就变成了离散的数字数组。
👇 **动手点点看**:拖动滑块,看看连续的模拟声波是怎么被“切片”成数字音频的。
<AudioEncodingDemo />
---
## 2. 存储桥梁:发出去之前,总得先放个地方
数据编完码之后,准备发给别人。但在这之前,必须要先把它放在电脑的物理介质里。这就涉及到一个不可避免的硬件铁律。
你可能会想:**“既然都要存,全存在读写最快的地方不就好了吗?”**
然而在硬件世界里,永远有个鱼和熊掌不可兼得的魔咒:**速度越快的存储介质,通常造价越贵,能做出的容量也越小。**
为了用尽可能少的钱换取尽可能快的电脑运行速度,计算机科学家不得已设计了**「存储层次结构」**(也就是存储金字塔)。
👇 **动手点点看**
点击金字塔的不同层级,看看现代计算机是怎么精打细算的。
<StoragePyramidDemo />
**🎯 核心领悟:操作系统的搬运工哲学**
世界上没有完美的存储器。因此,操作系统(如 Windows, macOS)就像一个极度聪明、一刻不停的仓库管理员:
1. 它把海量的电影、游戏塞在速度慢、容量大(便宜)的仓库——**SSD 或机械硬盘**里。
2. 当你要玩游戏时,它赶紧把相关的高清贴图文件,从硬盘搬运到速度极快但容量有限的操作台——**内存(RAM)**上。
3. 当你关闭游戏时,它再把内存清空,腾出操作台给别的文件用。
> **解惑**:当你玩大型开放世界游戏时,遇到场景切换要黑屏很久(读条),本质上就是因为硬盘仓库太慢,搬运工(系统)正在玩命地把下一张地图的数据搬到内存操作台上呢。
---
## 3. 什么是数据传输?(让 0 和 1 出发旅行)
数据编完码、存在了内存里,接下来就是发给朋友了。
> **数据传输**,就是把代表 0 和 1 的电信号(或光信号),顺着网线、电缆或无线电波,准确无误地从一台机器送到另一台机器的过程。
### 3.1 硬件与局域网传输:一条导线的物理极限
在机箱内部,或者两台靠得很近的电脑之间发数据,我们面临的是**纯粹的物理挑战**。
很多人第一个想到的点子是:“一根电线一次发 1 个信号,那我并排接 8 根线,速度不就是 8 倍吗?”
这就是早期用来插硬盘的**并行传输(Parallel)**思路。
然而,今天手机的 Type-C、外部的 USB 和主板内部的 PCIe 接口,用的全都是**串行传输(Serial,只有一根主通道发数据)**。
👇 **动手点点看**
比较一下串行和并行传输的动画。
<DataTransmissionDemo />
**💡 为什么“一条小路”击败了“八车道”?**
在速度不快时,8 根线确实强。但当我们需要每秒发几十亿次信号时,问题出现了:
并排的几根线上的微弱电流会产生极强的电磁波互相干扰(串扰 Crosstalk);而且你根本无法保证发送端同时发出的 8 个信号,能完美**同时**到达终点线。只要有一根线因为杂质阻抗慢了一丝拉,8 个拼在一起的字就彻底乱了。
所以,与其花天价去调平 8 条赛道,不如把所有技术资源砸在 1 辆跑车上,把它拉到光速。这就是串行接口一统天下的物理真相。
### 3.2 广域网与互联网传输:漂洋过海的防丢艺术
如果你的数据不是发给机箱里一寸外的显卡,而是要发给大洋彼岸美国服务器呢?
一根连续的导线是不可能的。数据要穿过光缆、海底基站、无数个破旧的路由器。这时候,面临的不再是物理极限,而是**容错保全挑战**。
当你用微信发送 1GB 的超大视频时,底层的逻辑像极了国际搬家——你不可能整个集装箱直接扔给邮政。
1. **分包(Packetization**:网络会把视频切成几万个信封大小的“数据包”(通常是 1500 字节)。
2. **校验(Checksum**:为防止途中海底光缆被鲨鱼咬断一根线,导致某个包里的 `0` 翻转成了 `1`,系统会在发件前,用复杂的数学公式对信封里的信件算出一个“特征码”贴在上面。
3. **TCP重发与确认**:接收方拿到信封,先自己在纸上验算一遍特征码。如果不对(沿途受损),或者发现序号从 31 直接跳到了 33(丢包),就会通过网络大喊一声:**“我没收到 32 号,请你再重发一遍 32 号!”**
正因为有了这种底层叫做 **TCP(传输控制协议)** 的极其严密的切包对账机制,你在地下室或者极不稳定的 WiFi 下下载微信文件,就算下了半小时,下载完的那一瞬间,文件也必定是 100% 完整、0 损坏的。
---
## 4. 终局实战:从拍下快门到发朋友圈的全流程
前面我们将“如何翻译成数字(编码)”、“放在哪里保管(存储)”、“如何完好地走完旅途(传输)”都分块讲了一遍。
现在,让我们把这些积木搭起来,沉浸式观看一个日常中再普通不过的操作:**拍一张照片自动备份到云端。**
当你按下快门的那一秒钟,手机内部其实已经打响了一场极其恢弘的数字战争。
👇 **动手点点看**
点击“执行这一步”,追踪这笔数据惊险的完整生命旅程。
<PhotoUploadJourneyDemo />
---
## 5. 名词对照表
当你阅读其他文档时,可能会遇到下面这些行话,这里为你准备了一张速查表:
| 术语 / 缩写 | 中文对照 | 简单解释 |
| :--- | :--- | :--- |
| **Bit (b)** | 比特 / 位 | 计算机世界最小的单位,只能是 0 或者 1。 |
| **Byte (B)** | 字节 | 8 个 Bit 捆在一起就是一个 Byte。它是文件大小最基础的衡量单位。 |
| **Character Set** | 字符集 | 就像是“字典的目录”,规定了某个文字存在,并没有规定在硬盘里具体怎么写。 |
| **Encoding** | 编码 | 具体的“存储规则”,决定了字典里的那个字,对应底层到底是哪几个字节(如 UTF-8)。 |
| **RAM** | 内存 / 运行内存 | 极其快速但断电就清空的工作台。你手机的 8G/16G 运存指的就是这个。 |
| **SSD** | 固态硬盘 | 现代电脑负责永久保存数据的仓库,基于闪存芯片,比老式机械硬盘快几十倍。 |
| **Serial / Parallel** | 串行 / 并行 | 串行是一条通道挨个排队飞奔;并行是多条通道齐头并进(但不适合极高频率)。 |
| **Checksum** | 校验和 | 传输数据时附带的验证码。收件人算一遍,如果和包裹上写的一致,说明没坏。 |
| **TCP** | 传输控制协议 | 互联网的基石协议。负责把大文件切片、贴序号、丢包重发,保证数据 100% 完整送达。 |
---
## 总结
文章一开始提出的诸多疑惑,现在你已经站在了系统底层的视角有了答案:
- **为什么同样的文件你收到后变乱码了?**
数据没坏,只是你的阅读软件没选对密码本(编码问题)。
- **为什么现在电脑背后的线大多是一根小小的 Type-C,却比以前很宽的线传输还要快?**
因为以前是几辆马车并排慢跑容易撞车(并行),现在是一列高铁在专线上极速狂飙(串行)。
- **为什么大型游戏在读取场景时要黑屏很久?**
因为它需要把动辄几十 GB 的大文件,从速度慢的硬盘(仓储区),拼命搬运拼接到速度快但昂贵的内存(核心工作台)里。
计算机的本质其实非常朴素:
**它不过是一个擅长把所有的光影文字“转换(编码)”、放在某个硅片里“保管(存储)”、然后再把它切碎成电平脉冲“邮寄出去(传输)”的机器**
读懂了这个循环往复的过程,你就真正握住了推开计算机底层原理大门的那把钥匙。