JSON データを NAO/Pepper で扱うときの文字列の問題
忘却録としてのメモです。
過去何度か JSON データを NAO/Pepper で扱うと文字化け問題が起こり、都度場当たり的な対応をしていました。根本的に解決する方法がわかればいいのですが、そこに行き着くまでに、まず、同じことを何度も調べ直さなくてもいいように少し場当たり的だけど簡単な解決方法を残しておきます。
問題を引き起こす可能性が高いのは
json.loads()
これは JSON 形式の文字列を Python のオブジェクトに変換してくれる非常に便利なメソッドですが、ここで変換された値が文字列の場合、unicode 文字列になっていると。NAO/Pepper の TTS などには utf-8 文字列を渡してあげる必要があり、ここでデータ形式の不整合が発生します。
これに対する少し場当たり的だけど最も簡単な解決方法は、取り出したデータを都度 .encode("utf-8") として utf-8 でエンコードしなおしてあげると
以下、確認用のテストコード。'{"text":"おはよう"}' という文字列が来た想定で、要素 text の値を取り出し、変数 textValue に代入
import json jsonText = '{"text":"おはよう"}' data = json.loads(jsonText) textValue = data['text'].encode('utf-8')