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}) }
说明
unquote方法会将URL编码的字符串转换为对应的Unicode字符,比如%E0%A4%AD%E0%A4%BE%E0%A4%B0%E0%A4%A4会被解码为भारत。- 确保返回的
body是通过json.dumps序列化的JSON字符串,配合content-type头可保证客户端正确解析Unicode字符。
内容的提问来源于stack exchange,提问作者shantanuo
相关产品推荐
相关产品推荐

