Python http.client を使用して、JSON データ コンテンツを Elasticsearch インデックスにアップロードしています。データを正常に配置できましたが、文字の問題が発生しています。挿入されると、 のような特殊文字が のé
ように出力されé
ます。
コードは次のとおりです。
import http.client
connection = http.client.HTTPConnection(elastic_address)
headers = {"Content-type": "application/json", "Accept": "text/plain"}
connection.request('PUT', url=endpoint, headers = headers, body=json_data.encode('utf-8'))
é
ソース JSON の特殊文字を に置き換えて送信する前に変更すると、正常に動作することに気付きました\u00E9
。Elasticsearch が別の char エンコーディングを使用している可能性がありますが、このリンクによると、ES は文字コーディングとして utf-8 を使用しています。
http.client パッケージの client.py も概説しましたが、データは latin-1 でエンコードされているようです。以下を参照してください。
def _encode(data, name='data'):
"""Call data.encode("latin-1") but show a better error message."""
try:
return data.encode("latin-1")
except UnicodeEncodeError as err:
raise UnicodeEncodeError(
err.encoding,
err.object,
err.start,
err.end,
"%s (%.20r) is not valid Latin-1. Use %s.encode('utf-8') "
"if you want to send it encoded in UTF-8." %
(name.title(), data[err.start:err.end], name)) from None
スクリプトのどこに問題があるのか わかりませんか?http.client パッケージで? Elasticsearch インデックス設定で?
何か案が?