Python Mechanize: UnicodeEncodeError при загрузке файла UTF-8. кодек "ascii" - PullRequest
1 голос
/ 23 января 2011

Механизм механизации отлично подходит для автоматизации первых нескольких веб-экранов. Проблема в том, где необходимо загрузить файл в форме.

Вот фрагмент кода перед ошибкой:

br.select_form(name="form.uploadXMLDataWizardForm")
xmlFile = codecs.open("MyFile.xml", "rt", "utf8")
br.form.add_file(file_object=xmlFile, content_type="text/xml", filename="MyFile.xml", name="dataFile")
br.submit(name="$action:next")

Это приводит к следующей ошибке во время выполнения:

    br.submit(name="$action:next")
  File "build/bdist.macosx-10.6-universal/egg/mechanize/_mechanize.py", line 541, in submit
  File "build/bdist.macosx-10.6-universal/egg/mechanize/_mechanize.py", line 530, in click
  File "build/bdist.macosx-10.6-universal/egg/mechanize/_form.py", line 2999, in click
  File "build/bdist.macosx-10.6-universal/egg/mechanize/_form.py", line 3201, in _click
  File "build/bdist.macosx-10.6-universal/egg/mechanize/_form.py", line 2350, in _click
  File "build/bdist.macosx-10.6-universal/egg/mechanize/_form.py", line 3269, in _switch_click
  File "build/bdist.macosx-10.6-universal/egg/mechanize/_form.py", line 3252, in _request_data
  File "build/bdist.macosx-10.6-universal/egg/mechanize/_form.py", line 1341, in _write_mime_data
UnicodeEncodeError: 'ascii' codec can't encode characters in position 650-651: ordinal not in range(128)

Есть идеи, как заставить механизированную загрузку файла UTF-8 обрабатывать?

1 Ответ

3 голосов
/ 25 января 2011

Механизация, похоже, ожидает данные файла в виде необработанных байтов, а не данных Unicode. Попробуйте открыть файл с помощью обычной функции open():

...
xmlFile = open("MyFile.xml", "rt")
...
...