私はmysqlでデータベースを作成し、webpyを使って自分のWebサーバーを構築します。Webpyを使用すると中国語が文字化けするのはなぜですか?しかし、MySQLdbを使用すると正常ですか?
しかし、WebpyとMySQLdbの動作の間には、データベースにアクセスする際に漢字がそれぞれ奇妙です。
私のテーブルt_test(UTF8のdatabse):
id name
1 测试
"测试" のUTF8コードは次のとおりです。以下は
は私の問題であるXE6 \ XB5 \ x8b \ xe8 \ \ \ X95 XAF行うためのMySQLdbを使用している場合、このように "選択":
c=conn.cursor()
c.execute("SELECT * FROM t_test")
items = c.fetchall()
c.close()
print "items=%s, name=%s"%(eval_items, eval_items[1])
結果が正常であるが、それは出力します。
items=(127L, '\xe6\xb5\x8b\xe8\xaf\x95'), name=测试
しかし、私はwebpyが同じことを行う使用する場合:
db = web.database(dbn='mysql', host="127.0.0.1",
user='test', pw='test', db='db_test', charset="utf8")
eval_items=db.select('t_test')
comment=eval_items[0].name
print "comment code=%s"%repr(comment)
print "comment=%s"%comment.encode("utf8")
中国の文字化けが発生し、印刷結果は次のとおりです。私はwebpyのデータベースものMySQLdbに依存している
comment code=u'\xe6\xb5\u2039\xe8\xaf\u2022'
comment=忙碌鈥姑€
知っています、しかし、これらの2つの方法ではとても異なっています。どうして?
上記の理由から、私はちょうど私の中国語の文字化けの問題を解決するために直接MySQLdbを使用することができますが、それはテーブルのclolumnの名前を失う - それは非常に恥ずかしいです。私はどのように私がそれをwebpyで解決できるのか知りたいですか?
実際、検索する文字列はゴミだけに見えます。 datbaseのデータがutf-8でエンコードされていない可能性がありますか?どのようにそこに記録されたのですか? – jsbueno
私のデータベースのデータもutf-8であると確信しています。 Navicatを使ってmysqlテーブルをチェックし、 "测试"の16進コードはE6B5 8BE8 AF95です。また、UtraEditを使用してこれを確認することもできます。 @jsbueno – eason
関連性があるかどうかわかりませんが、文字化けした文字列を印刷すると次のようになります。http://codepad.org/o3DgYhxr、æμ<试の代わりに忙碌姑。どこに文字列を印刷していますか? –