2012-02-06 4 views
1

Я знаю, что были аналогичные вопросы, но я думаю, что проблема, которую я имею, немного отличается от них. Пожалуйста, несите меня; Я только начал использовать Python 4 месяца назад, и я уверен, что мои показания незрелости!Unicode Ошибка при использовании JSON

Я пишу программу, которая отображает данные LinkedIn из файла CSV, используя плагин Protovis в дендрограмме. Как я могу видеть, плагин настроен правильно, и все это основано на Mining of the Social Web от O'Reilly's. Тем не менее, когда я запускаю мой код в IDLE, я получаю следующее сообщение об ошибке:

Traceback (most recent call last): 
File "C:/Users/Envy 15/Desktop/MASIDendo", line 115, in <module> 
    html = open(HTML_TEMPLATE).read() % (json.dumps(json_output),) 
    File "C:\Python27\lib\json\__init__.py", line 231, in dumps 
    return _default_encoder.encode(obj) 
    File "C:\Python27\lib\json\encoder.py", line 201, in encode 
    chunks = self.iterencode(o, _one_shot=True) 
    File "C:\Python27\lib\json\encoder.py", line 264, in iterencode 
    return _iterencode(o, 0) 
UnicodeDecodeError: 'utf8' codec can't decode byte 0x96 in position 17: invalid start `byte` 

Теперь, как я понимаю, причина ошибки Unicode, что есть не-Unicode символы в одном из моих имен файлов , однако я проверил их, и это не так. Часть моего кода, на которой он указывает, составляет:

html = open(HTML_TEMPLATE).read() % (json.dumps(json_output),) 
f = open(os.path.join(os.getcwd(), 'out', OUT), 'w') 
f.write(html) 
f.close() 

print 'Data file written to: %s' % f.name 

# Open up the web page in your browser 

webbrowser.open('file://' + f.name) 

Любая помощь с этим была бы высоко оценена!

+1

Первая строка вашего фрагмента пытается сделать слишком много - создание JSON, загрузка шаблона и iterpolating значений для создания окончательного HTML. Разделите их на отдельные шаги, и вы с большей вероятностью увидите, что происходит. –

ответ

2

проверьте свои базы, проверьте содержимое json_data, используйте функцию repr() или pprint.pprint().

ул и Юникода объекты имеют методы кодирования и декодирования, которые принимают ошибки аргумент, например: "\x66\x89".decode("utf-8", "replace")

json.dumps кодирует данные в формате JSON, странно, что вы передаёте json_output в качестве входных данных.

+1

Я уступаю твоей мудрости, сэр :) – nfirvine

+0

И я благодарю тебя :) –

0

Похоже, что ваш объект json_output имеет в себе строку, которая не является кодировкой Юникода или Юникода. Это не проблема с файлом.

+1

Большое вам спасибо! предложение qarma было лучше; Я застрял в распечатке (json_output), и он дал мне все символы не-Юникода, которые были в моих данных. – user1192309

Смежные вопросы