1

mysql から選択したキリル文字を出力しようとしています。これが私のコードです:コンテンツID DBはcp1251です

>>> db = MySQLdb.connect(host="localhost", user="XXX", passwd="XXXX" )
>>> cursor = db.cursor()
>>> cursor.execute("""select id,title,cat,text,tags,date from db1.table1;""")
>>> test=cursor.fetchone()
>>> somevar=test[1]
>>> somevar=somevar.decode('utf8')
>>> print somevar
Result: ?????? ?? ????????

これを正しく印刷する方法を教えてください。どうも。

4

2 に答える 2

3

これは私を助けました(ここから入手しました):

db = MySQLdb.connect("localhost", config.db_user, config.db_pwd, config.db_name)

# here's the magic
db.set_character_set("utf8")
dbc = db.cursor()
dbc.execute("SET NAMES utf8;")
dbc.execute("SET CHARACTER SET utf8;")
dbc.execute("SET character_set_connection=utf8;")

# and here goes your SELECT for cyrillic fields
dbc.execute("SELECT id, title, cat, text, tags, date FROM db1.table1;")

# and then you just get the results
test = dbc.fetchone()
somevar = test[1]
print somevar
于 2015-10-22T19:25:27.163 に答える
1

これを試して:

somevar = somevar.decode('cp1251')

それでも問題が解決しない場合は、MySQLdb.connect に charset='cp1251' パラメータを追加してみてください。use_unicode パラメータがあるので、それを使用する必要があります...


ここで見つけることができるすべての接続パラメーターhttps://github.com/farcepest/MySQLdb1/blob/master/MySQLdb/connections.py

use_unicode

True の場合、接続の文字セットを使用して、テキストのような列が Unicode オブジェクトとして返されます。それ以外の場合、テキストのような列は文字列として返されます。列は通常の文字列として返されます。Unicode オブジェクトは、この設定に関係なく、常に接続の文字セットにエンコードされます。

charset

指定した場合、接続文字セットはこの文字セット (MySQL-4.1 以降) に変更されます。これは use_unicode=True を意味します。

于 2013-04-09T16:36:33.473 に答える