Lobsters | 原文链接 | 2026-09-14 收录

值得在文件名里占一席之地的编码:Base84

来源: 00f.net — 2026-09-09

概述

TurboCrypt 原本用 Base91 编码加密后的文件名,因为它产出的字符串在 Unix 与 macOS 上都是合法文件名。但用户要求 Windows 支持,而 Windows 禁止九个可打印 ASCII 字符(< > : " / \ | ? *),只剩 85 个;又因为以点结尾的名字在 Windows shell 与文件 API 下不可靠,于是连点也去掉,正好剩 84 个可以出现在文件名任何位置的字符。作者说这种编码似乎从未被正式定义或使用过,尽管它完美适配「需要编码成可移植且文件系统安全的名字」这件事。文章给出了按编码顺序排列的字母表,并解释位打包的取舍:以五个字符为一组,84 的 5 次方只比 2 的 32 次方少 2.6%,编码器先看接下来的 31 位,若其值小于差值就多塞一位,否则只吃 31 位,平均约 6.39 bit 每字符,膨胀率约 25.2%,略逊于 Base85,最坏情况(全 0xff)约 29%。他还分析了大小写不敏感文件系统上的碰撞概率,结论是可忽略。

核心要点

金句

令人意外的是,这样一种编码既没有正式定义、似乎也没人在用,尽管它完美适配「编码成可移植且文件系统安全的名字」这件事。
返回 Lobsters 首页