2016-04-21 35 views
0
# -*- coding: utf-8 -*- 

s = u'ö' 
d = {'s': s} 
print d 

我得到{'s':u'\ xf6'},這不是我想要的,而我希望它是{'s':u'ö 「}。 我該怎麼辦...字典中的unicode編碼不正確[python]

+1

改爲使用Python 3。 – mhawke

+0

我也想要..但這個項目使用一些第三方庫沒有完整的蟒蛇3支持.. – Lebs

+0

這實際上是一個問題?如果你打印(d ['s']),它會打印出'ö' – MikeTGW

回答

0

看看這樣的事情太可怕了一段代碼可以幫助:

def pretty(mydict): 
    string = u'{' 
    nkeys = len(mydict.keys()) 
    for i, key in enumerate(sorted(mydict.keys())): 
     item = [key, mydict[key]] 
     for j in range(2): 
      if type(item[j]) in (str, unicode): 
       item[j] = ['', 'u'][type(item[j]) == unicode]+"'"+item[j]+"'" 
      else: 
       item[j] = str(item[j]) 
     string += item[0] + ': ' + item[1] 
     if i < nkeys-1: 
      string += ', ' 
    string += '}' 
    return string 

s = u'ö' 
d = {'s': s} 
print pretty(d) 

我爲自己感到羞恥。但也應該輸出,

{'s': 'ö'} 

我希望它的作品,我只有Python 3的安裝在我的筆記本電腦和我檢查這個就repl.it網站。
請注意,這只是一個基本的答案,每次使用unicode字符串時,軟件都有責任使用u''。即如果你這樣做,

d['test'] = 'ê' # instead of u'ê' 

然後d.pretty()會拋出一個錯誤。
另請注意,它不適用於嵌套對象,即d[1] = [1, u'ö']將不會顯示您想要的「ö」。

+0

(編輯爲'return'而不是'print'字符串) – Roberto

+0

(並重新編輯以在第9-10行上添加else子句) – Roberto

+0

(並且最終編輯以從類切換到簡單函數) – Roberto

0

你是什麼意思「不是我想要的?」 u'ö' == u'\xf6'試試這個:

print d['s'] 
# ö 
print ord(d['s']) 
# 246