2016-12-06 9 views
-1

私の要件は、mysqlデータベースからいくつかのデータを読み込んで、それをJSON形式でファイルに書き出すことです。ただし、ファイルへの書き込み中に、ユニコードデータが文字化けします。ファイルの書き込み中にPython :: Unicode文字が文字化けする

Actual Unicode Name: ぎぎぎは.exe 
Name written to file: ã<81>Žã<81>Žã<81>Žã<81>¯.exe 

私のデータベースのcharsetはutf8に設定されています。

MySQLdb.connect (host = "XXXXX", user = "XXXXX", passwd = "XXXX", cursorclass=cursors.SSCursor,charset='utf8',use_unicode=True) 

をそしてOUTFILEは以下のように開いている:私は以下のような接続を開封しております

for r in data: 
with open("XX.json",'w') as out: 
    d={} 
    d['name']=r[0] 
    d['type']='Work' 
    out.write('%s\n' % json.dumps(d, indent=0, ensure_ascii=False).replace('\n', '')) 

これが動作しているが、Unicodeデータ上記のようにすると、文字化けしてきています。

私が(r [0])と入力すると、 'str'と表示されます。

あなたのソリューションにencoding.open関数を使用する場合、エンコーディングを 'utf-8'として使用する場合は、必要に応じてデコード/エンコードを追加してください。この方法では、すべてのデータをUnicodeにする必要があります。

私は解決可能なオンラインの過多で失われていますが、それらのどれも私のために完全に正常に動作していません:(

OS詳細:CentOSの6

>>> import sys 
>>> sys.getfilesystemencoding() 
'UTF-8' 
>>> 
+1

Python 3を使用している場合は、 '' open( "XX.json"、 "w"、encoding = 'utf-8') 'を実行するだけです。 –

+0

@AntonisChristofides私はPython 2.6.6を使用しています。アップグレードできません私のpythonモジュール。 –

+0

テキストを変換するユニコードとは何かを理解するためにこれを読んでください。それはあなたの事件を行う正しいことを領収書を入れて誰に関係なく、あなたはこれを理解する必要があります。 http://www.joelonsoftware.com/articles/Unicode.html – jsbueno

答えて

0

io.open試してみてください。

# -*- coding: utf8 -*- 
import json 
import io 
with io.open('b.txt', 'at', encoding='utf8') as json_file: 
    json_file.write(json.dumps({u'ぎぎぎは': 0}, ensure_ascii=False, encoding='utf8')) 
+0

OPでPython 2を使用しているというコメントがありました。 –

+0

Excellent、me too –

+0

ああ、ごめんなさい:-)実際にはPython 2で 'io'について知りませんでした。 –

関連する問題