2011-01-23 6 views
1

mechanizeフレームワークは、最初の数組のWeb画面を自動化するのに最適です。問題は、フォームでファイルをアップロードする必要がある場所です。ここでPython Mechanize:UTF-8ファイルをアップロードするときのUnicodeEncodeError。 'ascii'コーデック

だけで、エラーの前にコードのセクションです:

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-のMechanizeのハンドルのアップロードを行うための方法を任意のアイデアを8ファイル?

+0

'codecs.open()を使うと、UTF-8ではなく内容が読み取られます。 –

+0

@Ignacio私は以前にUTF-8コンテンツの読み書きにcodes.openを使用しました。あなたの提案は何ですか? :-) – byneri

+0

はい、UTF-8でエンコードされたファイルを読むために使用できますが、UTF-8ではありません。 –

答えて

3

Mechanizeは、ファイルデータをUnicodeデータではなく生のバイトとして認識しているようです。ファイルを開くには、通常のopen()関数を使用してください:

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

それはそれでした!私はそれがとても簡単だとは信じられません。ありがとう! – byneri

関連する問題