-2

两天来,我一直在努力解决我面临的问题。

最终目标是将苹果 wiki 服务器的内容迁移到 foswiki/twiki 标记。

我找到了一个 xslt 样式表,它可以完成大部分工作,并且做得相当好,而且速度很快。要使用它,我需要做的就是为其提供格式良好的 (X)HTML,这就是 tidy 的用武之地——苹果 wiki 数据结构的“内容”字符串中有很多 HTML 标签,但不完整。

使用 xmlrpc 内省,未记录的苹果 API 几乎可以使用,并在苹果论坛上散布一些提示。

现在尝试使用 tidy 给了我:

UnicodeEncodeError: 'ascii' codec can't encode character u'\u2013' in position 121: ordinal not in range(128)

显然,我搜索了这个错误消息,发现了几篇文章,包括 Stackoverflow 上的一些文章,但它们似乎表明这是我正在使用的终端的编码问题。但是, LANG=en_US.UTF-8 在这里,所以这不是我的问题的原因。

我找到了一篇建议摆脱 BOM 的文章,但这样做我创建了一个新的错误消息,对我来说毫无意义:

UnicodeDecodeError: 'ascii' codec can't decode byte 0xef in position 0: ordinal not in range(128)

这是相关的代码片段:

pages = {}

paths = s.groupsForSession(session_id) # paths is a list of groups that user can read on that server
for aPath in paths:
  entries = s.wiki.getEntries(session_id, aPath)
  # entries = s.search.getEntries(session_id, aPath)
  pprint.pprint(entries)

  for uid in entries:
    try:
      entry = s.wiki.getEntryWithUID(session_id, uid['uid'])
    except Exception, e:
      print e.faultString
      raise Exception
    pages[uid['uid']] = entry
    pprint.pprint(  pages[uid['uid']]['content'])
    print(
      tidy.parseString(
        str(
          unicode(
              pages[uid['uid']]['content'].strip(codecs.BOM_UTF8), 'utf-8'
          )
        ),
        **options
        )
      )
4

1 回答 1

1

正如@oefe 所建议的:

再做几次实验后,我得到了我想要的;看起来关于编码问题的消息让我叫错了树。问题的解决方案非常简单。

tidy.parseString( str( pages[uid['uid']]['content'].encode('utf-8') ), **options )
于 2013-03-10T22:41:18.453 回答