2010-03-31 10 views
5

Python içinde UTF-8 dosyası işlenirken ediyorum ve bir sözlüğe içine yüklemek için simplejson kullandık.Python: Bir UTF-8 dosyasından bazı metinlerde str() neden bir UnicodeDecodeError verir?

f = open('my_json.json', 'r') 
master_dictionary = json.load(f) 
#some json wrangling, then it fails on this line... 
mysql_string += " ('" + str(v_dict['code']) 
Traceback (most recent call last): 
    File "my_file.py", line 25, in <module> 
    str(v_dict['code']) + "'), " 
UnicodeEncodeError: 'ascii' codec can't encode character u'\xf4' in position 35: ordinal not in range(128) 

Neden Python bile ASCII kullanıyor: Ben bir dizeye sözlük değerlerinden birini açmak çalıştığınızda Ancak, ben bir UnicodeDecodeError alıyorum? Varsayılan olarak UTF-8 kullandığını ve girişin UTF-8 dosyasından olduğunu düşündüm.

$ file my_json.json 
my_json.json: UTF-8 Unicode English text 

Sorun nedir?

import sys 
sys.setdefaultencoding("utf-8") 

her şeyi istemiyorsanız bu istenmeyen sonuçlara yol açabilir varsayılan olarak unicode edilecek: bu işi yapmak için

cevap

6

Python 2.x varsayılan olarak ASCII kullanır .

v_dict['code'].encode('utf-8') 
+0

teşekkür: Bir unicodestr bir dönüşmesini istiyorsanız unicode.encode() kullanın! sözlükte tüm öğeleri kodlamak için yaptım: k için v_dict.iteritems() v: eğer v_dict [k]: v_dict [k] = v_dict [k] .encode ('utf-8') – AP257

2

bir yolu gibi, açıkça UTF-8'e varsayılan kodlamayı ayarlamak olacaktır .

mysql_string += " ('" + unicode(v_dict['code'])

veya açıkça kodlamayı belirtmek:

Bir temizlikçi yolu str yerine unicode işlevini kullanmak olabilir

mysql_string += " ('" + unicode(v_dict['code'], "utf-8")

İlgili konular