如何编码dict中的所有值?

时间:2014-01-15 22:07:09

标签: python encoding utf-8

我正在尝试对此dict((k.encode('utf-8'), v.encode('utf-8')) for (k, v) in data.items())的所有数据进行编码,但在UnicodeEncodeError: 'ascii' codec can't encode characters in position 0-4: ordinal not in range(128)处收到错误v

如果我直接像print data[0]['Album'].encode('utf-8')这样做,它就可以了。

更新:

这是dict中的一个项目(data [0]):

{'Album': u'\u041c\u0435\u0442\u0440\u043e 2033', 'MIME Type': 'application/epub+zip', 'Kind': 'ebook', 'Persistent ID': '018D714FCD176F02', 'Name': u'\u041c\u0435\u0442\u0440\u043e 2033', 'Extension': 'epub', 'Artist': u'\u0414\u043c\u0438\u0442\u0440\u0438\u0439 \u0410\u043b\u0435\u043a\u0441\u0435\u0435\u0432\u0438\u0447 \u0413\u043b\u0443\u0445\u043e\u0432\u0441\u043a\u0438\u0439', 'Unique ID': '65B713FCA7956AAA', 'Publisher Unique ID': 'urn:uuid:f29c974b-d68c-412c-964f-652e5a24a7c4', 'Package Hash': 'DB3AC6E6F43ED7477CE1B998C410FD5F', 'Has Artwork': True, 'Path': '018D714FCD176F02.epub', 'Is Protected': False}

1 个答案:

答案 0 :(得分:1)

为我工作而不对密钥进行编码(并且使用密钥编码工作,但它没有意义 - 所有密钥实际上只是ascii字符串)并且具有字符串的检查值:

{k:v.encode('utf-8') if isinstance(v, basestring) else v for k,v in d.items()}
  

{'相册':'\ xd0 \ x9c \ xd0 \ xb5 \ xd1 \ x82 \ xd1 \ x80 \ xd0 \ xbe 2033','MIME   输入':'application / epub + zip','Kind':'ebook','Has Artwork':是的,   '名称':'\ xd0 \ x9c \ xd0 \ xb5 \ xd1 \ x82 \ xd1 \ x80 \ xd0 \ xbe 2033','扩展':   'epub','艺术家':   “\ XD0 \ X94 \ XD0 \ XBC \ XD0 \ XB8 \ XD1 \ X82 \ XD1 \ X80 \ XD0 \ XB8 \ XD0 \ xb9   \ XD0 \ X90 \ XD0 \ XBB \ XD0 \ XB5 \ XD0 \ XBA \ XD1 \ X81 \ XD0 \ XB5 \ XD0 \ XB5 \ XD0 \ XB2 \ XD0 \ XB8 \ XD1 \的x87   \ XD0 \ X93 \ XD0 \ XBB \ XD1 \ X83 \ XD1 \ X85 \ XD0 \ XBE \ XD0 \ XB2 \ XD1 \ X81 \ XD0 \ XBA \ XD0 \ XB8 \ XD0 \ xb9' ,   '唯一ID':'65B713FCA7956AAA','发布商唯一ID':   'urn:uuid:f29c974b-d68c-412c-964f-652e5a24a7c4','Package Hash':   'DB3AC6E6F43ED7477CE1B998C410FD5F','Path':'018D714FCD176F02.epub',   '持久ID':'018D714FCD176F02','受保护':错误}