codec.open () будет декодировать содержимое файла с использованием предоставленного вами кодека (utf-8). Затем у вас есть объект Unicode Python (который ведет себя подобно строковому объекту).
Печать объекта Unicode вызовет имплицит (за кадром) кодирование с использованием кодека по умолчанию, который обычно ascii
. Если ascii
не может закодировать все присутствующие символы, произойдет сбой.
Чтобы напечатать это, вы должны сначала кодировать это, таким образом:
for location in locations:
print location['name'].encode('utf8')
РЕДАКТИРОВАТЬ:
Для вашей информации, json.load()
на самом деле принимает объект, похожий на файл (это то, что codecs.open()
возвращает). В этот момент у вас есть ни строка, ни объект Unicode, но итеративная обертка вокруг файла.
По умолчанию json.load()
ожидает, что файл будет закодирован в utf8, поэтому ваш фрагмент кода может быть упрощен:
locations = json.load(open('../../publish_scripts/locations.json'))
for location in locations:
print location['name'].encode('utf8')