NoNameZ
NoNameZ

Reputation: 795

How to encode all values in the dict?

I'm trying to encode all my data like this dict((k.encode('utf-8'), v.encode('utf-8')) for (k, v) in data.items()) but get the error UnicodeEncodeError: 'ascii' codec can't encode characters in position 0-4: ordinal not in range(128) at v.

If i do it directly like print data[0]['Album'].encode('utf-8') it works just fine.

UPDATE:

Here is one item from the 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}

Upvotes: 1

Views: 594

Answers (1)

ndpu
ndpu

Reputation: 22571

Works for me without encoding for keys (and with keys encoding works to but it is senseless - all keys actually just ascii strings) and with check value for string:

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

{'Album': '\xd0\x9c\xd0\xb5\xd1\x82\xd1\x80\xd0\xbe 2033', 'MIME Type': 'application/epub+zip', 'Kind': 'ebook', 'Has Artwork': True, 'Name': '\xd0\x9c\xd0\xb5\xd1\x82\xd1\x80\xd0\xbe 2033', 'Extension': 'epub', 'Artist': '\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', 'Unique ID': '65B713FCA7956AAA', 'Publisher Unique ID': 'urn:uuid:f29c974b-d68c-412c-964f-652e5a24a7c4', 'Package Hash': 'DB3AC6E6F43ED7477CE1B998C410FD5F', 'Path': '018D714FCD176F02.epub', 'Persistent ID': '018D714FCD176F02', 'Is Protected': False}

Upvotes: 1

Related Questions