Я пытался решить проблему, с которой я столкнулся в течение двух дней.Проблемы с python, xmlrpc, tidy и unicode
Конечная цель - перенести содержимое сервера вики-файлов на ящик foswiki/twiki.
Я нашел таблицу стилей xslt, которая выполняет большую часть работы, и делает это достаточно хорошо и быстро. Все, что мне нужно сделать, чтобы использовать его, - это прокормить его хорошо сформированный (X) HTML, в котором находится аккуратная строка «content» в структуре данных wiki для Apple, в ней много HTML-тегов, но она неполна.
Использование интроспекции xmlrpc, не документированный API-интерфейс apple, практически можно использовать с несколькими подсказками, разбросанными на форумах 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
)
)
* вздох * Мы все знаем знаменитого медведя, правда? Еще несколько экспериментов позже я получаю то, что хочу; похоже, что сообщения о проблемах с кодировкой заставили меня лаять неправильное дерево. решение проблемы было довольно простым. 'tidy.parseString ( ул (страницы [UID [ 'UID']] [ 'содержание']. закодировать ('UTF-8') ), ** опции ) ' – tink
FYI, 'ул()' не требуется. Результатом 'encode()' является 'str'. –
Thanks Mark - у меня все еще есть крутая кривая обучения впереди меня с python;) – tink