2012-02-06 3 views
1

類似の質問が掲載されていることは知っていますが、私が持っている問題はそれらに比べて少し異なると思います。私に同行してください。私は4ヶ月前にPythonを使い始めましたが、私の未熟さが分かると確信しています!JSONを使用したUnicodeエラー

デンドログラムにProtovisプラグインを使用してCSVファイルからLinkedInデータを表示するプログラムを作成しています。プラグインは、私が見る限り、正しく設定されています。これは、すべて、O'ReillyのソーシャルWebマイニングに基づいています。しかし、私は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を作成し、テンプレートをロードし、値を反復して最終的なHTMLを作成します。これらを別々のステップに分割すると、何が起こっているのかをよりよく確認できます。 –

答えて

2

ベースを確認し、json_dataの内容を検証し、repr()またはpprint.pprint()を使用します。

STRとユニコードオブジェクトは、このように、方法は、エンコードとエラー引数を受け入れるデコード持っている:"\x66\x89".decode("utf-8", "replace")

json.dumps JSONにデータを符号化し、あなたが入力としてそれをjson_outputを渡すこと奇妙です。

+1

私はあなたの知恵にお世話になりました:) – nfirvine

+0

そして私はあなたに感謝します:) –

0

あなたのjson_outputオブジェクトには、ユニコードまたはユニコードエンコードではない文字列が含まれています。それは問題のファイル名ではありません。

+1

ありがとう、あなたは2つ! qarmaの提案はより良かった。私はprint repr(json_output)にこだわり、私のデータにあったすべての非ユニコード文字を私に渡しました。 – user1192309

関連する問題