0

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 インデックス設定で?

何か案が?

4

0 に答える 0