<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>文件格式 on 技术博客 - 有条工具</title><link>/blog/tags/%E6%96%87%E4%BB%B6%E6%A0%BC%E5%BC%8F/</link><description>Recent content in 文件格式 on 技术博客 - 有条工具</description><generator>Hugo -- 0.147.7</generator><language>zh-cn</language><copyright>2024-2025 有条工具技术博客</copyright><lastBuildDate>Wed, 11 Nov 2026 08:30:00 +0800</lastBuildDate><atom:link href="/blog/tags/%E6%96%87%E4%BB%B6%E6%A0%BC%E5%BC%8F/feed.xml" rel="self" type="application/rss+xml"/><item><title>vCard 解剖：一行一属性、75 字符折行与 iPhone item1. 分组的私有方言</title><link>/blog/articles/vcard-format-anatomy/</link><pubDate>Wed, 11 Nov 2026 08:30:00 +0800</pubDate><guid>/blog/articles/vcard-format-anatomy/</guid><description>手机通讯录导出的 .vcf 是纯文本：BEGIN:VCARD 开场、一行一个属性、分号分隔结构化字段。这篇拆解 vCard 的转义次序为什么不能乱、规范折行如何用「换行加空格」回接长行、N 与 FN 谁说了算、中文名该怎么拆，以及 iPhone 导出文件里 item1.TEL 这类私有分组写法的兼容处理。</description></item><item><title>EPUB 解剖：一个 ZIP 如何装下一本书，mimetype 为何必须第一个且不压缩</title><link>/blog/articles/epub-container-anatomy/</link><pubDate>Tue, 10 Nov 2026 09:00:00 +0800</pubDate><guid>/blog/articles/epub-container-anatomy/</guid><description>EPUB 3 的本质是一个改了打包规矩的 ZIP：mimetype 条目必须排第一、必须 STORE 不压缩，META-INF/container.xml 指路，OPF 清单串起章节与双目录（EPUB 3 的 nav 加兼容旧阅读器的 toc.ncx）。这篇按规范逐层拆开 .epub，并讲 TXT/Markdown 按章节切分的正则细节与为什么全程可以在浏览器里完成。</description></item><item><title>ID3 标签解剖：synchsafe 整数、反同步与 MP3 乱码歌名的字节级真相</title><link>/blog/articles/id3-tag-anatomy/</link><pubDate>Tue, 10 Nov 2026 08:40:00 +0800</pubDate><guid>/blog/articles/id3-tag-anatomy/</guid><description>MP3 里显示的歌名、歌手、封面不是音频数据，是嵌在文件头部的 ID3 标签。这篇逐字节拆解 ID3v2 的帧结构：synchsafe 整数为什么要砍掉每个字节的最高位、unsynchronisation 防的是什么假警报、四种文本编码如何决定中文是正常显示还是乱码，以及文件末尾那 128 字节的 ID3v1 遗产。</description></item><item><title>DEFLATE 解剖：LZ77 与霍夫曼如何压掉七成体积，gzip 头尾字段逐个讲</title><link>/blog/articles/deflate-gzip-anatomy/</link><pubDate>Tue, 10 Nov 2026 08:20:00 +0800</pubDate><guid>/blog/articles/deflate-gzip-anatomy/</guid><description>gzip 文件 = 10 字节头 + DEFLATE 流 + 8 字节尾。这篇拆开三层：RFC 1952 的容器字段、RFC 1951 里 LZ77 滑窗与霍夫曼编码的接力、以及浏览器 CompressionStream 一行流式 API 的能力边界——为什么没有压缩级别参数、为什么多成员 gzip 只解出第一个。</description></item><item><title>MP4 文件结构：ISO-BMFF 的 box 逐层拆解</title><link>/blog/articles/mp4-box-structure-anatomy/</link><pubDate>Mon, 09 Nov 2026 06:10:00 +0800</pubDate><guid>/blog/articles/mp4-box-structure-anatomy/</guid><description>播放器能在两 GB 的文件里秒级定位画面，靠的是 MP4 的 box 索引树。从 size 与 type 两个通用字段讲起，逐层拆开 moov 里的 mvhd、tkhd、stsd、stts、stsz，解释手机竖拍的旋转藏在哪个字段、分片 fMP4 长什么样，以及为什么 MP4 压不小必须重编码。</description></item><item><title>文件取证入门：EXIF、魔数与改后缀的把戏</title><link>/blog/articles/exif-magic-numbers-file-forensics/</link><pubDate>Mon, 09 Nov 2026 05:55:00 +0800</pubDate><guid>/blog/articles/exif-magic-numbers-file-forensics/</guid><description>把 .exe 改名成 .jpg 骗得过文件管理器，骗不过文件开头的魔数。本文拆解 PNG、PDF、ZIP 的签名字节、ZIP 家族的内部伪装、JPEG 里挂载的 EXIF/TIFF 结构，以及位置隐私是怎么随一张原图泄露出去的。</description></item><item><title>GIF 格式解剖：LZW、交织与帧合成的每一字节</title><link>/blog/articles/gif-format-anatomy/</link><pubDate>Mon, 09 Nov 2026 05:40:00 +0800</pubDate><guid>/blog/articles/gif-format-anatomy/</guid><description>一个 1987 年的格式至今撑着表情包与客服动图，靠的是 LZW 变长码、帧增量合成与交织扫描这三板斧。逐字节拆解 GIF 的文件结构、LZW 解码的 KwKwK 特例、disposal 语义与 NETSCAPE 循环扩展，并说明为什么抽帧工具要用零依赖纯 JS 从头实现。</description></item></channel></rss>