-1

編集: エラーは Prompt には表示されませんが、次の Google App Engine 環境では表示されます。 コード実行環境 私は次のjsonを持っています

>>>dat = r"""{"name":"Something", "data":"For youth \n\nBe a hero! Donate blood!\n\u091c\u092f \u0939\u093f\u0902\u0926! \u0935\u0928\u094d\u0926\u0947 \u092e\u093e\u0924\u0930\u092e\u094d"}"""

Unicode エスケープ文字が含まれています。これを解析したい。だから私はやった

>>>jsDat = json.loads(js)

その後、次の作品

>>>name = jsDat.get('name')
>>>name = name.encode('ascii') #This is because json module handles in unicode
>>>print name
Something

しかし、Unicodeデータのフィールド、つまり「データ」を取得しようとすると、エラーが表示されます

>>>data = jsDat.get('data')
UnicodeEncodeError: 'ascii' codec can't encode characters in position 366-367: ordinal not in range(128)

データを解析するにはどうすればよいですか?

4

2 に答える 2

1

エラーは「印刷」行から発生しています。これは、エンコーディングを理解していない「端末」に印刷しようとしているためです。JSON オブジェクトに対して他の操作を行っても、エラーは発生しません。

于 2012-08-14T20:01:59.167 に答える
1

文字が ASCII 文字セットを超える場合、Unicode を ASCII にエンコードすることはできません。強制的に変換してデータを失いたい場合は、次のようにします。

data = jsDat.get('data')
data = data.encode('ascii', 'ignore')

無視の詳細については、str.encodeのドキュメントを参照してください。

余談ですが、なぜASCIIにエンコードしようとしているのかわからない-JSONモジュールはその生の文字列をうまく処理しているようだ?

于 2012-08-14T16:26:18.180 に答える