AWS Lambda Python3 Как вернуть строку вместо двоичной (по умолчанию) проблемы с CJK - PullRequest
0 голосов
/ 06 сентября 2018

Я строю массивный гусеничный ход, который AWS Lambda должен использовать для своей скорости. Но так как я читаю данные из лямбды, он будет кодировать не английский текст дважды.

что-то вроде

"b\'<!DOCTYPE html>\\\\r\\\\n<html lang=\\"ko\\">\\\\r\\\\n<head>\\\\r\\\\n\\\\t<title id=\\"browse_title\\">\\\\\'\\\\xec\\\\x8a\\\\x88\\\\xea\\\\xb0\\\\x80\\\\xeb\\\\xa7\\\\xa82\\\\\'

код от лямбды

def get_html(url):
    r = requests.request(url=url, method="GET")
    # r.encoding = 'euc-kr'

    return {
        "html": r.content
    }

Код от вызова лямбды

def call_lambda_function():
    invoke_response = client.invoke(
        FunctionName="lambda_function_test",
        InvocationType="RequestResponse",
        Payload=json.dumps(payload)
    )
    data = invoke_response['Payload'].read()
    print(data)

вывод из запуска лямбды

b '{"html": "\ r \ n \ r \ n \ r \ n \ t \' \ uc288 \ uac00 \ ub9e82 \ '7 \ uacf5 \ uc8fc \ uadfc \ ud669 \ uacf5 \ uac1c \ "\ Uc5f0 \ uae30 \ u00b7 \ uce74 \ uc774 \ uc2a4 \ ud2b8 \ uc785 \ ud559 \ u82b1 \ ubc29 \ uc1a1 \ uc0ac \ ud569 \ uaca9 \ "....

добавление decode('my-encoding') не сработает. он будет декодироваться, но декодированный результат будет закодированной строкой. (что я сказал двойным кодированием)

Так! вот что я хочу.

я хочу, чтобы лямбда не возвращала байт, а строковый объект.

Хотелось бы, чтобы для этого было простое решение!

иначе я пытался это сделать. adding return str(return_target) to lambda function это все еще вернет байты

1 Ответ

0 голосов
/ 06 сентября 2018

Простое решение.

добавить json.dumps к лямбде добавить json.loads для вызова результата (после декодирования)

...