R2 は Workers の上に構築されており、Unicode をネイティブに扱えます。Unicode で見落とされがちな点のひとつが、Unicode 等価性 ↗ による ファイル名の相互運用性 ↗ です。
ユーザーからのフィードバックを踏まえ、キー名は保存前にデフォルトで NFC 正規化します。そのため、たとえば Héllo と Héllo は R2 では同じオブジェクトですが、ほかのストレージプロバイダーでは別オブジェクトになります。Héllo と Héllo は文字のバイト列が違っても、表示は同じです。
一方で、表示用のエンコーディングは保持します。オブジェクトを一覧すると、最後にアップロードしたときのエンコーディングが返ります。
プラットフォーム固有の違いも残ります。
- Windows と macOS のファイル名は大文字と小文字を区別しません。R2 と Linux は区別します。
- Windows コンソールの Unicode 対応は誤りやすいです。オブジェクト名が正しく見えない場合は、コマンドラインツールの前に
chcp 65001を実行するか、Cygwin を使ってください。 - Linux ではファイル名がバイト列のため、Unicode 等価でも別ファイルとして存在できます。Linux 上の Unicode 等価なファイル名は、同じ R2 オブジェクトを指します。
Unicode 等価性を回避し、バイト指向のキー名を使いたい場合は、Cloudflare のアカウントチームに連絡してください。