我服务的文件来自谷歌云存储和一些文件名包含非ASCII,UTF-8编码字符。例如,volvía.mp3。
如果我请求volvía.mp3,GCS会抛出一个错误。
如果我将文件名(í= %C3%AD)编码为volv%C3%AD.mp3,它仍然失败。
如果我使用“组合尖锐重音”= %CC%81作为volvi%CC%81a.mp3对文件名进行编码,它就成功了。
有什么好主意吗?
编辑:它引发的错误是“拒绝访问”错误:Anonymous users does not have storage.objects.get access to object。然而,这似乎是在请求一个找不到的对象时会遇到的错误。
发布于 2017-08-01 20:06:14
问题在于Mac的HFS+文件系统,它对文件名强制执行正则分解 (NFD)。这意味着它将字符标准化为两个代码点(i +合并尖锐重音),而不是使用在“组合”窗体中的单个代码点,即NFC)。
GCS将这两种不同的形式视为不同的文件名,尽管它们看起来是相同的。
一种解决方案是在上传到GCS之前将NFD文件名转换为更常见的NFC表单(使用实用工具(如convmv) )。但是,这不能在Mac上完成,因为文件系统本身强制NFD。
发布于 2017-07-31 16:41:55
我无法重现你的问题。我上传了一个名为volvía.mp3的对象,并能够将其检索为http://storage.googleapis.com/bucketname/volvía.mp3和http://storage.googleapis.com/bucketname/volv%C3%ADa.mp3。
我怀疑您实际上创建了一个具有“结合尖锐口音”字符的对象。你是怎么上传你的对象的?
https://stackoverflow.com/questions/45394157
复制相似问题