2017-07-29 116 views
1

我正在從Google雲端存儲提供文件,部分文件名包含非ASCII,UTF-8編碼字符。例如,volvía.mp3Google雲端存儲無法處理UTF-8文件名

如果我要求volvía.mp3,GCS將引發錯誤。

如果我百分比編碼文件名(í=%C3%AD)爲volv%C3%AD.mp3,它仍會失敗。

如果我使用「combine acute accent」=%CC%81作爲volvi%CC%81a.mp3編碼文件名,它會成功。

任何想法是怎麼回事?

編輯:它引發的錯誤是「訪問被拒絕」錯誤: Anonymous users does not have storage.objects.get access to object。但是,這似乎是請求找不到的對象時得到的錯誤。

+0

GCS返回的錯誤是什麼? –

+0

@ mike-schwartz訪問被拒絕錯誤。 –

+0

菲爾 - 您能否通過電子郵件向[email protected]發送電子郵件(具體存儲桶名稱和對象名稱以及您提出請求的確切時間)?請提及我的名字,以便將它傳送給我。謝謝。 –

回答

0

問題歸因於Mac OS的HFS +文件系統,該文件系統對文件名執行canonical decomposition(NFD)。這意味着它將諸如í的字符標準化爲兩個代碼點(i +結合急性重音),而不是在「合成」形式(即NFC)中使用的單個代碼點)。

GCS將這兩種不同的形式視爲不同的文件名,儘管它們看起來完全相同。

一個解決方案是在上載到GCS之前將NFD文件名轉換爲更常見的NFC表單(使用諸如convmv之類的實用程序)。但是,這不能在Mac OS上完成,因爲文件系統本身強制執行NFD。

0

我無法重現您的問題。我上傳了一個名爲volvía.mp3對象,並能找回它既是http://storage.googleapis.com/bucketname/volvía.mp3http://storage.googleapis.com/bucketname/volv%C3%ADa.mp3

我懷疑你真正的「組合重音符」角色創建的對象來代替。你是如何上傳你的物品的?

+0

使用'gsutil -m cp'上傳文件。 –

+0

這是一個合理的懷疑,然而,這是事情有點模糊。如果我收到UTF-8文本,並且它包含單詞_volvía_,並且我提取該單詞,請將其存儲在sqlite中,檢索它,將其作爲文件名寫出並上傳文件 - 如果使用原始文本結合口音?那是我能看到這種事情發生的唯一方式嗎?我從來沒有遇到需要規範變音符編碼方式的想法。 –

+0

此外,如果我將相同的文件上傳到我自己的服務器,它服務就好了。 –

相關問題