質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
86.12%
Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

解決済

requests.post時に 日本語データでUnicodeEncodeErrorが発生してしまう

XYZ
XYZ

総合スコア2

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

2回答

0リアクション

0クリップ

292閲覧

投稿2022/09/05 01:30

前提

pythonで CSVを読んでOracle DBに登録したり、Oracle RestAPI を使い、ERPとOracle DBで受け渡しを行ったりしてります。
requests.post時に UnicodeEncodeErrorが発生してしまいます。
対応方法を教えていただきたいです。

実現したいこと

API操作(あるURLにrequests.post) してOracle  ERP環境に情報登録をしたい

発生している問題・エラーメッセージ

File "c:\Users\XX\20220905\main_test.py", line 945, in main response = requests.post(url, data=json.dumps(json_data, indent=4, ensure_ascii=False), auth=HTTPBasicAuth(user, password), headers=headers) File "C:\Users\XX\Miniconda3\lib\http\client.py", line 168, in _encode raise UnicodeEncodeError( UnicodeEncodeError: 'latin-1' codec can't encode characters in position 66-78: Body ('レジ部') is not valid Latin-1. Use body 部') is not valid Latin-1. Use body.encode('utf-8') if you want to send it encoded in UTF-8.

該当のソースコード

Python

import requests import json #jsonのセットなど省略 headers = {"content-type": "application/json; charset=utf-8"} # response = requests.post(url, json_data, headers=headers) response = requests.post(url, data=json.dumps(json_data, indent=4, ensure_ascii=False), headers=headers) response.encoding = response.apparent_encoding print(response.status_code) print(response.text) ・utf-8で情報をPOSTしたい・ ( response.apparent_encoding=”UTF8")

試したこと

https://qiita.com/tmhknkmr12/items/0f5c3c6f6584933397f2

補足情報(FW/ツールのバージョンなど)

Python 3.9.12 Anaconda(Miniconda)

以下のような質問にはリアクションをつけましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

リアクションが多い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

気になる質問をクリップする

クリップした質問は、後からいつでもマイページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

下記のような質問は推奨されていません。

  • 間違っている
  • 質問になっていない投稿
  • スパムや攻撃的な表現を用いた投稿

適切な質問に修正を依頼しましょう。

XYZ

2022/09/05 01:40 編集

headers = {"content-type": "text/html; charset=utf-8"} # utf-8でエンコードし、Str型にする urlencode_post_data = urllib.parse.urlencode("{0}".format(json_data).replace("'", '"').encode("utf-8”), encoding="utf-8") response2 = requests.post(url, urlencode_post_data, auth=HTTPBasicAuth(user, password), headers=headers) などで送付すると結果が    ステータス 400    Unable to parse the provided payload ( 提供されたペイロードを解析できません  になってしまいます
quickquip

2022/09/05 01:59 編集

情報の追記をこの欄にしないでください。 質問を編集しましょう。(紛らわしいです/紛れてしまいます)
XYZ

2022/09/05 02:40

了解しました

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
86.12%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問

同じタグがついた質問を見る

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。