同一段视频 9 种压法:设得越「清楚」,文件反而越大
同一段 63 秒视频 9 种压法实测:设得越清楚,文件越大画质没变好。

我把一张三行的名单表交给程序读,身份证号后两位变了。
表格很普通:姓名、身份证、手机号、工号,人眼看着一点问题都没有。程序读出来的身份证却是另一个数。
这篇记一下我实测到的三种变形,还有怎么躲开。
先给结论:18 位身份证会变,11 位手机号不变,工号的 0012 会丢掉前面的零。
我在表里按数字填了身份证 110101199003078515,程序读回来是 110101199003078512。
换一个再试:310101198512310017 读回来是 310101198512310016,末位 7 变成 6。
不是程序写错了。表格存数字能记准的上限是 15 位,像一把只有 15 个刻度的尺子,量 18 位长的东西,尾巴那几格只能估。18 位数字塞进去,末尾几位就被改掉了。
手机号 11 位,短于 15,塞得下,所以原样不变。这一点和我原先想的不一样,我本以为手机号也会坏。
表格文件里到底存了什么,我直接把文件解开看了,身份证那一格记的原文是 1.101011990030785e+17。
工号那一列,我给单元格贴了一个「显示成四位」的格式,屏幕上看着是 0012。
程序读出来是 12。
单元格格式只是给眼睛看的贴纸,不影响格子里存的内容。存的一直是 12,贴纸把它显示成 0012 而已。凡是靠「看一眼屏幕对不对」来验收数据的,这一条最容易漏。
我把这张表的值原文照抄导出成 CSV,身份证那一列直接变成这样:
张三,1.101011990030785e+17,13800138000,12
一列里混着 21 个字符的科学计数法和正常数字。这份文件再往下传,后面每个环节都得重新猜这是什么。
中文 CSV 有两种常见存法,我互相读了一遍。
存 GBK 的(中文版 Excel 另存为 CSV 就是这种),用 UTF-8 去读,报错原话是:
UnicodeDecodeError: 'utf-8' codec can't decode byte 0xd0 in position 0: invalid continuation byte
反过来用 GBK 读就正常。
存 UTF-8 的文件,最前面加三个字节 EF BB BF(叫 BOM,等于告诉 Excel「我这份是 UTF-8」),用 Excel 打开中文就不乱;不加这三个字节,Excel 猜成 GBK,中文就是乱码。这个我也验了:没加标记的文件开头是 e5 a7 93(「姓」的 UTF-8 编码),加了标记的是 ef bb bf e5 a7 93。
inlineStr(内联文字),读回来和原文一字不差。同一段 63 秒视频 9 种压法实测:设得越清楚,文件越大画质没变好。
同一张壁纸 674.9 KB 能压到 122.9 KB,站上 15 张配图省到四分之一
三个老推送接口都死了,我用 IndexNow 把新文章推给搜索引擎