Python simplejsonでunicodeのjsonを扱う(‘ascii’ codec can’t encode characters in position 0-1: ordinal not in range(128))

投稿者: Anonymous

Pythonで下記のようなutf8のjsonをファイルから読み込んで表示しましたが、下記エラーのため表示できませんでした。

[
    {
        "id": "1",
        "idx": 1,
        "text": "あああああ"
    }
]

エラー

Traceback (most recent call last):
  File "./index.cgi", line 23, in <module>
    print d['text']
UnicodeEncodeError: 'ascii' codec can't encode characters in position 0-1: ordinal not in range(128)

idとidxは問題なく表示されますがtextはこのエラーが出ます。どのようにすれば表示できるのでしょうか。

jsonの扱いはsimplejsonで下記のようにファイルを読み込んでいます。

f = open('sample.json', 'r')
data = json.load(f)

PythonはPython2.5.1です。
よろしくお願いします。

index.cgi

#!/usr/bin/python
#coding:utf-8


import sys
import cgitb
cgitb.enable()
try:
    import json
except ImportError:
    import simplejson as json

print 'Content-Type: text/htmln'
print

f = open('sample.json', 'r')
data = json.loads(f.read().decode('utf-8'))
f.close()


for d in data:
    print d['text']

#print json.dumps(data, ensure_ascii=False).encode('utf8')

解決

文字コードを指定してファイルを読む必要があります.

import codecs

f = codecs.open('sample.json', 'r', 'utf-8')
data = json.load(f)

としてみて下さい.

回答者: Anonymous

Leave a Reply

Your email address will not be published. Required fields are marked *