两天来,我一直在努力解决我面临的问题。
最终目标是将苹果 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
)
)