【问题标题】:UnicodeDecodeError when I rename a plone site's name当我重命名一个克隆站点的名称时出现 UnicodeDecodeError
【发布时间】:2013-03-15 20:17:51
【问题描述】:

Plone 4.2.5从4.1.4升级,default_language为zh-cn,default_charset为utf-8(portal_properties/site_properties)。

当我尝试在 ip:8080/ 的根页面中重命名 Plone 站点的名称时,会显示站点错误:

An error was encountered while publishing this resource. 
Error Type: UnicodeDecodeError
Error Value: ('ascii', '\xe8\xa2\x81\xe4\xba\x88\xe6\xb9\x98', 0, 1, 'ordinal not in range(128)')

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 OFS.CopySupport, line 333, in manage_renameObjects
  Module OFS.CopySupport, line 369, in manage_renameObject
  Module zope.event, line 31, in notify
  Module zope.component.event, line 24, in dispatch
  Module zope.component._api, line 136, in subscribers
  Module zope.component.registry, line 321, in subscribers
  Module zope.interface.adapter, line 585, in subscribers
  Module zope.component.event, line 32, in objectEventNotify
  Module zope.component._api, line 136, in subscribers
  Module zope.component.registry, line 321, in subscribers
  Module zope.interface.adapter, line 585, in subscribers
  Module OFS.subscribers, line 101, in dispatchObjectWillBeMovedEvent
  Module zope.container.contained, line 153, in dispatchToSublocations
  Module zope.component._api, line 136, in subscribers
  Module zope.component.registry, line 321, in subscribers
  Module zope.interface.adapter, line 585, in subscribers
  Module OFS.subscribers, line 101, in dispatchObjectWillBeMovedEvent
  Module zope.container.contained, line 153, in dispatchToSublocations
  Module zope.component._api, line 136, in subscribers
  Module zope.component.registry, line 321, in subscribers
  Module zope.interface.adapter, line 585, in subscribers
  Module OFS.subscribers, line 101, in dispatchObjectWillBeMovedEvent
  Module zope.container.contained, line 153, in dispatchToSublocations
  Module zope.component._api, line 136, in subscribers
  Module zope.component.registry, line 321, in subscribers
  Module zope.interface.adapter, line 585, in subscribers
  Module OFS.subscribers, line 101, in dispatchObjectWillBeMovedEvent
  Module zope.container.contained, line 153, in dispatchToSublocations
  Module zope.component._api, line 136, in subscribers
  Module zope.component.registry, line 321, in subscribers
  Module zope.interface.adapter, line 585, in subscribers
  Module OFS.subscribers, line 101, in dispatchObjectWillBeMovedEvent
  Module zope.container.contained, line 153, in dispatchToSublocations
  Module zope.component._api, line 136, in subscribers
  Module zope.component.registry, line 321, in subscribers
  Module zope.interface.adapter, line 585, in subscribers
  Module Products.CMFCore.CMFCatalogAware, line 271, in handleContentishEvent
  Module Products.Archetypes.CatalogMultiplex, line 49, in unindexObject
  Module Products.CMFPlone.CatalogTool, line 393, in uncatalog_object
  Module Products.ZCatalog.ZCatalog, line 508, in uncatalog_object
  Module Products.ZCatalog.Catalog, line 369, in uncatalogObject
  Module Products.PluginIndexes.common.UnIndex, line 286, in unindex_object
  Module Products.PluginIndexes.common.UnIndex, line 157, in removeForwardIndexEntry
UnicodeDecodeError: 'ascii' codec can't decode byte 0xe8 in position 0: ordinal not in range(128)

当我尝试将一些文件夹导入新创建的 Plone 站点时,曾发生过与 UnicodeDecodeError 相关的问题。

我成功地重命名了另一个 Plone 站点的名称。我不知道它们之间有什么区别。 :(

【问题讨论】:

  • 如果您可以从控制台获取完整的回溯并将其粘贴到您的问题中,那也会很有帮助。

标签: unicode plone


【解决方案1】:

您的网站有时会将 unicode 内容编入目录索引中,从而有效地破坏了它们。这可能是由于旧的 Plone 错误,或者是附加组件或自定义代码出错。

您可以尝试在默认 Python 编码设置为 UTF-8 的情况下运行完整的重新索引来解决此问题。 以下不是生产现场的推荐程序;这只是解决您问题的临时“石膏”。

在您的 Python site-packages 目录中,添加一个名为 sitecustomize.py 的文件,其内容为:

import sys

sys.setdefaultencoding('utf8')

然后重新启动您的克隆站点并尝试重命名或首先执行完整的目录重新索引。

记得再次删除sitecustomize.py 文件。在 Python 中设置默认编码只会掩盖未来的问题。

【讨论】:

  • 我的意思是不要修改网站标题。我在同一个 ZMI 下有两个克隆站点。现在 siteA 工作不正常,所以我创建了 siteB 并将项目从 siteA 导入到 siteB。为了不混淆用户,我尝试将siteA重命名为siteAbackup,然后将siteB重命名为siteA。 (我需要一个站点A的备份以防万一)
  • 那么请包括完整的回溯和您尝试做的更详细的描述。重命名 Plone 站点有点……棘手且复杂。您是否在站点前面有一个代理服务器,您可以将其调整为指向新实例?
  • 我添加了完整的回溯。我没有代理服务器。
  • @Hugo:很有趣。您的目录中有一个使用 Unicode 索引的对象,它正在破坏其他项目的索引。让我弄清楚可以做些什么(可能很棘手)。
  • 同时,将 Apache 或 Nginx 放在您的 Plone 站点前面以保护您免受许多常见攻击是良好做法;这些服务器比 Zope HTTP 服务器更坚固。此外,它还可以使替换站点更容易
猜你喜欢
  • 2012-06-17
  • 1970-01-01
  • 2011-07-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-01-16
相关资源
最近更新 更多