2017-07-29 53 views
1

Google Cloud Storageのファイルを配信していて、ファイル名の一部にASCII以外のUTF-8エンコード文字が含まれています。たとえば、volvía.mp3です。Google Cloud StorageでUTF-8ファイル名が処理されない

私がvolvía.mp3を要求した場合、GCSはエラーを投げます。

ファイル名が%のようにファイル名(%= C3%AD)をエンコードしても、それでも失敗します。

%を "acute accentを組み合わせる" =%CC%81を使用してファイル名をvolvi%CC%81a.mp3としてエンコードすると、成功します。

何が起こっているのですか?

EDIT:スローされるエラーは、「アクセスが拒否されました」というエラーです: Anonymous users does not have storage.objects.get access to object。しかし、これは見つからないオブジェクトを要求するときに発生するエラーのようです。

+0

GCSが返すエラーは何ですか? –

+0

@ mike-schwartzアクセス拒否エラーです。 –

+0

Phil - 詳細については、[email protected]宛てに電子メールを送ってください(特定のバケット名とオブジェクト名、要求した正確な時刻)。それが私に送られるように私の名前を言いなさい。ありがとう。 –

答えて

0

問題は、ファイル名にcanonical decomposition(NFD)を強制するMac OSのHFS +ファイルシステムに起因しています。つまり、「構成済み」のフォーム(つまり、NFC)で使用される単一のコードポイントではなく、íなどの文字を2つのコードポイント(i +急音アクセントの組み合わせ)に正規化します。

GCSは、これら2つの異なる形式を異なるファイル名として扱いますが、それらは同じように見えますが。

解決策の1つは、GCSにアップロードする前に、NFDファイル名をより一般的なNFCフォーム(convmvなどのユーティリティを使用)に変換することです。しかし、ファイルシステム自体がNFDを強制するため、これはMac OSでは実行できません。

0

問題を再現できませんでした。 volvía.mp3という名前のオブジェクトをアップロードしました。http://storage.googleapis.com/bucketname/volvía.mp3http://storage.googleapis.com/bucketname/volv%C3%ADa.mp3

実際には、 "acute acute accent"文字でオブジェクトを作成したと思われます。どのようにあなたのオブジェクトをアップロードしましたか?

+0

ファイルは 'gsutil -m cp'を使ってアップロードされました。 –

+0

それは合理的な疑いですが、これは少しばかり暗いところです。 UTF-8でテキストを受け取った場合、_volvía_という単語が含まれていて、その単語を抽出してsqliteに格納し、取り出してファイル名として書き出し、ファイルをアップロードします。結合アクセント? Bcは私がこれを見ることができる唯一の方法です。分音符号がコード化される方法を正規化する必要があるという考えに遭遇したことはありません。 –

+0

さらに、自分のサーバーに同じファイルをアップロードしても、うまく機能します。 –

関連する問題