ユニコードの相互運用性
R2はWorkersの上に構築されており、ユニコードをネイティブにサポートしています。ユニコードの一つのニュアンスで、しばしば見落とされるのが、ユニコードの同等性 ↗によるファイル名の相互運用性 ↗の問題です。
ユーザーからのフィードバックに基づき、デフォルトでキー名をNFC正規化してから保存することを選択しました。これは、例えばHélloとHélloがR2では同じオブジェクトである一方、他のストレージプロバイダーでは異なるオブジェクトであることを意味します。HélloとHélloは異なる文字バイト列である可能性がありますが、表示される際には同じになります。
ただし、R2は表示のためにエンコーディングを保持します。オブジェクトをリストすると、最後にアップロードしたエンコーディングが返されます。
考慮すべきプラットフォーム固有の違いもいくつかあります:
- WindowsとmacOSのファイル名は大文字と小文字を区別しませんが、R2とLinuxは区別します。
- Windowsコンソールのユニコードサポートはエラーが発生しやすいです。コマンドラインツールを使用する前に
chcp 65001を実行するか、オブジェクト名が正しく表示されない場合はCygwinを使用してください。 - Linuxでは、ファイル名がバイトストリームであるため、ユニコード同等の異なるファイルを許可します。Linux上のユニコード同等のファイル名は、同じR2オブジェクトを指します。
ユニコードの同等性を回避し、バイト指向のキー名を使用することが重要な場合は、Cloudflareのアカウントチームに連絡してください。