Python で mechanize を使用して、Web サイトからデータを取得し、新しいデータを送信しています。
問題は、サイトがフランス語であるため、éÉÀàùÙîû などのさまざまな文字の代わりに、ひし形 (�) の疑問符が表示されることです。
Google と StackOverflow を調べてみたところ、問題を解決できないさまざまな回答が見つかりました。次の行のいずれかを試すことを推奨する回答を見てきました。
myString = éÀî
myString.encode('latin-1')
myString.encode('iso-8859-1')
unicode(myString, 'iso-8859-1')
しかし、どれも機能していないようです。
これが必要になる 2 つのケースは、アクセント付きの csv ファイルと、アクセント付きのハードコードされた文字列を読み取るときです。たとえば、csv ファイルの行は次のようになります (実際には「;」が区切り文字です)。
Adam Guérin;myemail@mail.com;555-5555;2011-02-05
「é」は問題ないように見えますが、Web サイトの textField に mechanize を入力して送信しようとすると、実際の Web サイトでは「é」が「�」のように見えます。
編集:
これは、csv ファイル内のデータを読み取るための私のコードです。
subscriberReader = csv.reader(open(path, 'rb'), delimiter=';')
subscribers = []
for row in subscriberReader:
subscribers.append(Subscriber(row[0], row[1], row[2]))
次に、mechanize を使用して Web サイトに送信します。
self.br.select_form('aspnetForm')
self.br.form['fldEmail'] = subscriber.email
self.br.form['fldName'] = subscriber.name
self.br.form['fldPhoneNum'] = subscriber.phoneNum
self.br.submit()
文字をエンコードするさまざまな方法を試しましたが、正しく行っていないと思います。回答/コメントで提案されたものは何でも喜んで試します。
ウェブサイトに関しては、ヘッダーで使用しているエンコーディングを指定していません。