DjangoでAPIを叩くAPIを実装しているのですが、文字コード関連のエラーが出力されてしまいます
以下が処理の流れで、No.2が実装対象です
- クライアント(コンソール)がPOSTメソッドでリクエストボディに '{"test": "はろー"}' を含めて送信
- リクエストボディ '{"test": "はろー"}'の"はろー"を取得して、叩くAPIのリクエストボディに含めて送信
- jsonが返却される
リクエストボディのvalueが"はろー"ではなく"hello"などアルファベットの場合はエラーは出力されません
乱文で申し訳ありませんが、よろしくお願いします。
###試したこと
'# -- coding: utf-8 --の記述や、デフォルトをutf-8に変更しても変化がありませんでした
###環境
CentOS7.6
Django2.1
Python3
terateam(クライアント)
###エラー
UnicodeEncodeError: 'latin-1' codec can't encode characters in position 20-22: Body ('はろー') is not valid Latin-1. Use body.encode('utf-8') if you want to send it encoded in UTF-8.
###クライアントのcURLコマンド
curl -XPOST http://192.168.1.01:8000/ -H "Content-type: application/json" -d '{"test": "はろー"}'
###リクエストの処理
def test(request): if request.method == 'POST': req_decode = request.body.decode('utf-8') req = json.loads(req_decode) value = req['test'] url = 'http://fqdn(API)/' header = {'content-type':'application/json'} body = '{"test": "'+value+'"}' res = requests.post(url, headers=header, data=body) return render_json_response(request, res.json())
###返す時
def render_json_response(request, data, status=None): """response を JSON で返却""" json_str = json.dumps(data, ensure_ascii=False, indent=2) #indent=2 response = HttpResponse(json_str, content_type='application/json; charset=UTF-8', status=status) return response
回答2件
あなたの回答
tips
プレビュー