You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

AWS Lambda函数URL无法正确解析Unicode字符,如何修复?

AWS Lambda处理URL中Unicode字符的问题

我有一个可正常运行的AWS Lambda函数,代码如下:

import json

def lambda_handler(event, context):
    message = 'Hello {} !'.format(event['rawQueryString'])
    return { 
        'message' : message
    }

对应的函数URL访问?world时,返回结果符合预期:

{"message":"Hello world !"}

但URL中的Unicode字符无法被正确处理,比如访问带印地语字符的URL时,返回的是URL编码后的字符串而非原始Unicode字符:

预期返回:{"message":"Hello भारत !"}
实际返回:{"message":"Hello %E0%A4%AD%E0%A4%BE%E0%A4%B0%E0%A4%A4 !"}

我尝试添加UTF-8响应头,但问题依旧:

return {'statusCode': 200, 'headers': { "content-type":"application/json; charset=utf-8"}, 'body': json.dumps(message)}

解决方法

问题核心在于event['rawQueryString']是未解码的原始URL查询字符串,需要手动对其进行URL解码。使用Python标准库urllib.parse中的unquote方法即可处理:

修改后的代码如下:

import json
from urllib.parse import unquote

def lambda_handler(event, context):
    # 对原始查询字符串进行URL解码
    decoded_query = unquote(event['rawQueryString'])
    message = 'Hello {} !'.format(decoded_query)
    return {
        'statusCode': 200,
        'headers': {"content-type": "application/json; charset=utf-8"},
        'body': json.dumps({'message': message})
    }

说明

  1. unquote方法会将URL编码的字符串转换为对应的Unicode字符,比如%E0%A4%AD%E0%A4%BE%E0%A4%B0%E0%A4%A4会被解码为भारत。
  2. 确保返回的body是通过json.dumps序列化的JSON字符串,配合content-type头可保证客户端正确解析Unicode字符。

内容的提问来源于stack exchange,提问作者shantanuo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.13 12:41:23