Python Mechanize:上传UTF-8文件时出现UnicodeEncodeError,'ascii'编解码器

1 投票
1 回答
900 浏览
提问于 2025-04-16 10:27

mechanize这个框架在自动化处理前面几个网页时效果很好。但是问题出现在需要在表单中上传文件的时候。

下面是出错前的那段代码:

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)

有没有什么办法让mechanize处理UTF-8格式的文件上传呢?

1 个回答

3

看起来,Mechanize 这个工具希望文件的数据是原始字节,而不是 Unicode 数据。你可以试着用普通的 open() 函数来打开文件:

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

撰写回答