2012-05-22 38 views
0

我一直在努力解決我現在面臨的兩個問題。python,xmlrpc,整潔和unicode問題

最終目標是將蘋果維客服務器的內容遷移到 foswiki/twiki標記。

我發現了一個xslt樣式表,可以完成大部分的工作,並且能夠很好地完成並快速完成。我需要做的就是爲它提供格式良好的(X)HTML,這是整潔的地方 - 蘋果wiki數據結構的「內容」字符串中有很多HTML標籤,但是不完整。

使用xmlrpc introspection未公開的蘋果API變得幾乎可用,在蘋果論壇上散佈了一些提示。

正在嘗試用整齊給我:

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

很顯然,我搜索了此錯誤信息,並發現了一些文章,包括一些在這裏#2,但他們似乎表明,它的的編碼問題我正在使用的終端。但是,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 
     ) 
    ) 
+0

*嘆*我們都知道着名的bug-bear,對嗎?稍後再做幾次實驗,我得到了我想要的;看起來像關於編碼問題的消息讓我吠叫了錯誤的樹。該問題的解決方案非常簡單。 'tidy.parseString( STR(頁[UID [ 'UID']] [ '內容']。編碼( 'UTF-8') ) **選項 ) ' – tink

+0

FYI,'STR()'是不必要的。 'encode()'的結果是一個'str'。 –

+0

感謝馬克 - 我仍然有一個陡峭的學習曲線在我面前蟒蛇;) – tink

回答

0

至於建議的@oefe:

一些更多實驗後我得到我想要的東西;看起來像關於編碼問題的消息讓我吠叫了錯誤的樹。該問題的解決方案非常簡單。

tidy.parseString(str(pages[uid['uid']]['content'].encode('utf-8')), **options)