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

AWS Lambda+API Gateway返回Shift_JIS编码CSV的问题求助

解决AWS Lambda + API Gateway返回Shift_JIS编码CSV的问题

核心方案

API Gateway默认仅处理UTF-8文本响应,但通过Lambda返回base64编码的二进制数据+API Gateway自动解码的方式,客户端可直接拿到Shift_JIS编码的CSV,无需额外解码操作——网关会帮你完成这一步,并非需要客户端处理base64。

1. 调整Lambda函数代码

将Shift_JIS编码后的字节数据做base64编码,同时在返回对象中指定isBase64Encoded: true和正确响应头:

import codecs
import base64

def lambda_handler(event, context):
    # 从请求中获取输入文本,这里用示例值
    input_string = event.get('body', '武蔵野冷蔵名古屋')
    
    # 转换为Shift_JIS字节流
    shift_jis_bytes = codecs.encode(input_string, 'SHIFT_JIS', errors='ignore')
    # base64编码(供API Gateway解析用)
    base64_body = base64.b64encode(shift_jis_bytes).decode('utf-8')
    
    return {
        'statusCode': 200,
        'headers': {
            'Content-Type': 'text/csv; charset=Shift_JIS',
            # 可选:添加该头让浏览器直接下载文件
            'Content-Disposition': 'attachment; filename=output.csv'
        },
        'isBase64Encoded': True,
        'body': base64_body
    }

2. REST API配置(必须步骤)

若使用REST API,需配置二进制媒体类型并重新部署:

  • 打开API Gateway控制台,进入目标API
  • 切换到Settings标签页,在Binary Media Types中添加text/csv(或更精确的text/csv; charset=Shift_JIS)
  • 点击Deploy API,选择对应部署阶段生效

3. HTTP API配置

若使用HTTP API,无需额外配置二进制媒体类型,只要Lambda返回格式正确(isBase64Encoded: true+正确Content-Type),网关会自动处理二进制响应。

之前配置无效的常见原因

  • 未重新部署API:所有API Gateway配置变更必须重新部署才会生效,这是最容易忽略的点
  • Binary Media Types不匹配:比如设置了application/csv,但Lambda返回的Content-Type是text/csv,导致网关无法识别二进制响应
  • Lambda返回格式错误:未设置isBase64Encoded: True,或body不是base64编码的字符串(比如直接返回字节数据)

验证方法

用curl测试接口,查看响应头和内容:

curl -i https://<你的API ID>.execute-api.<区域>.amazonaws.com/<阶段>/<端点>

你会看到响应头包含Content-Type: text/csv; charset=Shift_JIS,且响应内容是Shift_JIS编码的原始文本,客户端可直接保存为CSV文件使用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 02:55:17