2016-04-21 54 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