Reputation: 795
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
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