-2

私は2日間、直面している問題を回避しようとしています。

最終的な目標は、AppleWikiサーバーのコンテンツをfoswiki/twikiマークアップに移行することです。

私は、ほとんどの作業を実行し、それを適度にうまく、そして高速に実行するxsltスタイルシートを見つけました。それを利用するために私がする必要があるのは、整形式の(X)HTMLをフィードすることだけです。これは、整頓されたものです。アップルwikiデータ構造の「コンテンツ」文字列には多くのHTMLタグが含まれていますが、不完全です。

xmlrpcイントロスペクションを使用すると、文書化されていないApple APIがほぼ使用可能になり、Appleフォーラムにいくつかのヒントが散らばっています。

整頓されたものを使おうとすると、次のようになります。

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 に答える