当我尝试通过 FTP 将具有非 ascii 字符(如德语变音符号)的文件上传到 Zope(进入 ZODB)时,我收到以下错误消息:
ERROR Zope.SiteErrorLog 1351502922.570.290289062967 http://0.0.0.0:8021/Zope2/websites/O%CC%88su%CC%88ra%CC%88ich.png/PUT
Traceback (innermost last):
Module ZPublisher.Publish, line 126, in publish
Module ZPublisher.mapply, line 77, in mapply
Module ZPublisher.Publish, line 46, in call_object
Module webdav.NullResource, line 173, in PUT
Module OFS.ObjectManager, line 325, in _setObject
Module OFS.ObjectManager, line 97, in checkValidId
BadRequest: The id "Ösüräich.png" contains characters illegal in URLs.
这是有道理的。但是,我正在使用 PUT_factory,以便将上传的文件作为我的自定义对象类型之一添加到 ZODB。在__init__
此类中,我将文件名更改为 Zope 中有效 id 的字符串。我已将self.__name__
和 self.id 设置为该字符串,但错误仍然存在。
为了调试,我在我的最后一行提出了一个异常__init__
raise Exception, self.id
这给了我正确的有效身份证件。但是当我删除最后一行时,我再次收到上面的错误。显然,没有创建新对象(没有调用 manage_afterAdd 方法)。
有没有办法解决这个问题,还是我必须忍受 Zope 的限制?