2016-11-24 18 views
2

私はpymysqlを使ってPythonでmysql dbからエントリを読み込もうとしています。データベースのエントリは地域の言語で表示されます。例: それがデータベース内に存在しているとしてここPythonでデータベースから英語以外の文字を読み取る方法は?

import pymysql 
conn = pymysql.connect(ip, user, pass, db, charset="utf8") 
curr = conn.cursor() 
curr.execute("select val from my_table") 
r = cur.fetchone() 

>>> r 
('74 ??????',) 
>>> r[0].encode("utf-8").strip() 
'74 \xd0\xbf\xd0\xbe\xd0\xb3\xd0\xbe\xd0\xb4\xd0\xb0' 

は、私がデータを取得していない午前:74погодаは、私は、このようなコードを書かれているそのようなエントリ です。

+0

ここを見て:http://stackoverflow.com/questions/15907509/python-cyrillic-decode –

+0

@AnatoliiChmykhaloもニシキヘビの第一人者であると私たちは森 – Drew

+0

の首からお知らせくださいこれは簡単な方法です 'a = '74 \ xd0 \ xbf \ xd0 \ xbe \ xd0 \ xb3 \ xd0 \ xbe \ xd0 \ xb4 \ xd0 \ xb0 ' >>>印刷a.decode(" utf-8 ") 74погода' –

答えて

1

これは、通常、MySQLdbはすべての文字をlatin-1にエンコードしようとしているからです。これは、接続をetablishedきた直後に、次のコマンドを実行することにより、固定することができます。

db.set_character_set('utf8') 
dbc.execute('SET NAMES utf8;') 
dbc.execute('SET CHARACTER SET utf8;') 
dbc.execute('SET character_set_connection=utf8;') 

デシベルはMySQLdb.connect()の結果であり、DBCは `db.cursor()*の結果です。

+0

OPはすでに 'connect()'コールで接続エンコーディングをUTF-8に設定しています。 pymysqlには 'set_character_set'メソッドがありません。サーバー側が使用するエンコーディングを変更するだけで、エンコーディングが使用中であることをクライアント側に知らせず、エスケープに失敗する可能性のあるクエリを実行して接続エンコーディングを設定しないでください(東アジアのセキュリティホールエンコード)。それらのすべての 'SET'クエリを投げることは純粋な迷信です。 – bobince

関連する問題