0

我正在使用 python http.client 将 JSON 数据内容上传到弹性搜索索引。我成功地实现了放置数据,但我遇到了字符问题。一旦插入,特殊字符就像é输出é

这是代码:

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 使用了另一种字符编码,但是根据这个链接,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