问题的由来
昨天有个朋友问我:“15KB的txt文件,大概能装多少中文字?”
我愣了一下。
说实话,作为一个爱折腾的人,我每天都在和文件大小打交道,但从来没认真算过这个问题。15KB听起来很小,但如果是纯文本,好像也能装不少字?
于是我决定算一算。
基础数学
首先,15KB等于多少字节?
15 KB = 15 × 1024 = 15,360 字节 (Bytes)好了,我们有15,360个字节可以用。接下来要看的是:每个中文字占多少字节?
这个问题没有标准答案,因为取决于你用的是什么编码格式。
不同编码的计算
UTF-8(目前最常用)
在UTF-8编码中,一个标准的中文字符通常占用3个字节。
计算:
15,360 ÷ 3 = 5,120 个中文字也就是说,15KB的UTF-8文本,纯中文的话能装5120个字。
这是什么概念呢?
- 一篇普通的高考作文是800字,15KB能装6篇。
- 这篇博客文章大概1500字,15KB能装3篇多。
- 《静夜思》是20个字,15KB能装256首。
GBK/GB2312(老Windows系统常用)
在这种编码中,一个中文字符占用2个字节。
计算:
15,360 ÷ 2 = 7,680 个中文字比UTF-8多了2560个字!这就是为什么老系统里中文文档看起来”更省空间”。
UTF-16/Unicode
UTF-16中,一个中文字符也占用2个字节(加上一点点文件头开销)。
所以和GBK差不多,也是7680个字左右。
但实际情况呢?
上面都是理论值,假设文件里全是纯中文,没有标点、没有数字、没有换行。
但现实中,一篇文章通常包含:
- 标点符号:中文标点占3字节(UTF-8),英文标点占1字节
- 阿拉伯数字:每个占1字节
- 英文字母:每个占1字节
- 换行符:Windows是\r\n(2字节),Linux/Mac是\n(1字节)
- 空格:1字节
所以如果你的15KB文件是中英文混合,或者有大量排版空格,实际的中文字数会比理论值多一些。
一个有趣的对比
| 内容 | 大概字数 | 15KB能装多少 |
|---|---|---|
| 一条微博 | 140字 | 36条 |
| 一条朋友圈 | 1500字 | 3条 |
| 一篇高考作文 | 800字 | 6篇 |
| 《静夜思》 | 20字 | 256首 |
| 《论语》全文 | 约15,000字 | 半个《论语》 |
| 《红楼梦》 | 约730,000字 | 需要950KB |
看到最后一条我突然意识到:原来《红楼梦》用纯文本存的话还不到1MB!
这让我对我硬盘里的那些几GB的”学习资料”产生了深深的怀疑。
编码选择的思考
既然GBK比UTF-8省空间,为什么现在大家都用UTF-8?
因为UTF-8有几个巨大的优势:
- 兼容性好:同时支持中文、英文、日文、emoji等各种字符
- 没有乱码问题:GBK文件在英文系统上打开会乱码
- 互联网标准:网页、API、现代软件都用UTF-8
- 存储不值钱:现在1TB硬盘几百块,那点空间差异可以忽略不计
省下的那点空间,抵不上兼容性带来的麻烦。
延伸思考
既然15KB能装5000多字,那……
- 1MB = 1024KB,能装约34万字
- 1GB = 1024MB,能装约3.5亿字
- 1TB = 1024GB,能装约3584亿字
作为参考:
- 《大英百科全书》约4000万字
- 人类历史上所有出版的书籍加起来估计有1.5亿种,平均每本10万字,就是1500万亿字
所以1TB存不下全人类的书,但存下一家小型图书馆还是没问题的。
写在最后
回到最初的问题:15KB能装多少中文字?
答案是:大约5000到7500字,取决于你用的是什么编码。
下次有人问你这个问题,你可以装作很懂行的样子说:
“看编码格式,UTF-8的话大概五千出头,GBK能到七千多。不过现代环境都用UTF-8,建议按五千来估算。”
然后看着对方懵逼的表情,深藏功与名。
小知识:微信聊天记录导出后,一年的记录通常也就几MB到几十MB。那些说”手机满了存不下聊天记录”的人,可能是在找借口。