※ Python 2.7.5で作成
※ MAC OSX
※ DBはローカル環境でかつ、同じクライアントで使用
MySQLから取得したデータを返すプログラムを作成しております。
その際に、日本語が入ったデータがあり、その際に文字化けが起こってしまい困っております。
unicodeからutf-8に変換しなくてはいけないということまでは理解しているのですが、
以下のように実装しましたが、上手く行きませんでした。
尚、 print で出力した場合のみ日本語として出力されますが、今回やりたい要件には満たさないため、他の方法を探っております。
teratailでも同様な質問と、その回答がありましたが、回答がprintによるものでしたので、質問させて頂きました。
https://teratail.com/questions/13085
また、今回の要件上、Pythonは3系は使えません。
# -*- coding: utf-8 -*- import MySQLdb connect = MySQLdb.connect(db="user", user="root", charset='utf8') connect.cursorclass = MySQLdb.cursors.DictCursor cursor = connect.cursor() cursor.execute('SELECT * FROM users') user = cursor.fetchone() print user["name"] # => 田中太郎(utf-8になっている) return user # => {id: 1,name: "文字化けが起きている", category_id: 2} user["name"] = user["name"].encode("utf-8") return user # => 同様に文字化けが起きる
アドバイスを頂けますと幸いです。
よろしくお願いします。
追記
lightsonlightson様の修正依頼に対して追記致します。
文字化けは、どのような文字列なのか追記してもらえますか?
user["name"]
=> ほげほげ
と期待しているのが
user["name"]
=> \xe3\x81\xbb\xe3\x81\x92\xe3\x81\xbb\xe3\x81\x92
となってしまいます。
MySQLの文字列は/etc/my.cnfでutf-8になっているでしょうか?
こちらmy.cnfはutf-8なのと、以下のようにutf-8になっている?かと思います。
mysql> show variables like 'char%';
+--------------------------+------------------------------------------------------+
| Variable_name | Value |
+--------------------------+------------------------------------------------------+
| character_set_client | utf8 |
| character_set_connection | utf8 |
| character_set_database | utf8 |
| character_set_filesystem | binary |
| character_set_results | utf8 |
| character_set_server | utf8 |
| character_set_system | utf8 |
| character_sets_dir | /usr/local/Cellar/mysql/5.6.16/share/mysql/charsets/ |
+--------------------------+------------------------------------------------------+