好快的踩坑. 果然在启用 UTF-8 的默认支持后就出现了问题. 这次是在 zip 压缩格式上的字符编码上, 准确一点来说是中文编码. 如果在 Windows 的 GBK(
cp936) 语言区域设置下使用 zip 打包并加密了一个文档, 将其密码设置为中文字符, 那么这个加密之后的文档在启用了 UTF-8(cp65001) 默认支持的 Windows 系统上是验证不了密码的(也就是密码错误). 除非更换到相同的系统编码配置(取消 UTF-8 默认支持). 但这实际上是 zip 字符编码的问题, 因为相同的 GBK 编码环境下打包的 rar 和 7z 加密格式在 UTF-8 默认支持环境下验证密码完全没有问题. 类似的情况会发生在任何默认不使用 UTF-8 支持的 Windows 上.这次问题的结论是: 不要在 zip 归档中使用非 ASCII 字符作为密码, 即使最新的规范中 zip 允许使用 UTF-8 编码, 但没有规定密码应该使用的编码, 并且几乎所有的软件都不遵守(不会设置 UTF-8 标志), 甚至会随意使用除了 zip 规范里规定的 cp437 和 UTF-8 之外的编码(日语 Shift-JIS(
cp932) 和简体中文 GBK(cp936) 是最常见的重灾区). 在 7z 的实现里 zip 归档时甚至默认不允许使用非 ASCII 字符作为密码, 但另外一个有名的压缩软件 WinRAR 却支持使用任意字符的 zip 密码, 包括中文字符甚至 Emoji.#Windows
via CXPLAY's Memos