2017-08-06 12 views
0

私はドイツ語のウムラウトでテキスト入力をWebフォーマルに挿入するためにセレンを使用しています。 Pythonスクリプトの宣言されたコーディングはutf-8です。このページはutf-8エンコーディングを使用しています。そのすべてが正常に動作しますように私は、文字列をdefinine時:Python encoding unicode utf-8

q = u"Hällö" #type(q) returns unicode 
... 
textbox.send_keys(q) 

をしかし、私はのConfigParserを使用して設定ファイル(またはファイルの別の一種)から読み取るしようとしたとき、私は(Hällö)webformularで不正な形式の出力を取得します。これは私が使用しているコードです:

the_encoding = chardet.detect(q)['encoding'] #prints utf-8 
q = parser.get('info', 'query') # type(q) returns str 
q = q.decode('unicode-escape') # type(q) returns unicode 
textbox.send_keys(q) 

send_keys関数に与えられる両方のqの違いは何ですか?

+0

は、代わりに '( 'ラテン-1')' q.decodeを試してみてください。 –

+0

同じ不正な形式の出力を取得する – Robin

+0

これはmojibakeの典型的な例です。あなたがUTF-8端末(Python 2または3)でこれを行うなら、 'print(u" Hllll ".encode( 'utf8')。decode( 'latin1'))' ' ¶'。逆に 'print(u'Hllll''encode( 'latin1')。decode( 'utf8'))'は 'Hällö'を出力します。 –

答えて

0

これはおそらく不正なエンコードです。最後のステートメントの前にqを印刷して、それが等しいかどうかを確認してください。この行q = parser.get('info', 'query') # type(q) returns strは、文字列'H\xc3\xa4ll\xc3\xb6'を返す必要があります。異なる場合は、間違ったコーディングを使用しています。

>>> q = u"Hällö" # unicode obj 
>>> q 
u'H\xe4ll\xf6' 
>>> print q 
Hällö 
>>> q.encode('utf-8') 
'H\xc3\xa4ll\xc3\xb6' 
>>> a = q.encode('utf-8') # str obj 
>>> a 
'H\xc3\xa4ll\xc3\xb6' # <-- this should be the value of the str 
>>> a.decode('utf-8') # <-- unicode obj 
u'H\xe4ll\xf6' 
>>> print a.decode('utf-8') 
Hällö 
>>> 
0
from ConfigParser import SafeConfigParser 
import codecs 

parser = SafeConfigParser() 

with codecs.open('cfg.ini', 'r', encoding='utf-8-sig') as f: 
    parser.readfp(f) 
greet = parser.get('main', 'greet') 

print 'greet:', greet.encode('utf-8-sig') 

挨拶:ハロー

cfg.iniファイル

[main] 
greet=Hällö