R2 构建于 Workers 之上,原生支持 Unicode。Unicode 中经常被忽视的一个细节是由于 Unicode 等价性 ↗ 导致的文件名互操作性 ↗问题。
根据用户反馈,我们选择在存储前默认对键名称进行 NFC 规范化。这意味着 Héllo 和 Héllo 在 R2 中是同一对象,但在其他存储提供商中是不同对象。虽然 Héllo 和 Héllo 可能是不同的字符字节序列,但它们的渲染效果相同。
不过,R2 在显示时保留编码。列出对象时,您将获得上次上传时使用的编码。
仍有一些平台特定的差异需要考虑:
- Windows 和 macOS 文件名不区分大小写,而 R2 和 Linux 区分大小写。
- Windows 控制台对 Unicode 的支持可能容易出错。在使用命令行工具之前请运行
chcp 65001,如果对象名称显示不正确,请使用 Cygwin。 - Linux 允许 Unicode 等价但不同的文件,因为文件名是字节流。Linux 上 Unicode 等价的文件名将指向同一 R2 对象。
如果您需要绕过 Unicode 等价性并使用面向字节的键名称,请联系您的 Cloudflare 账户团队。