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

如何在Google Apps Script中获取CSV文件?解码失败求助

解决Google Apps Script获取KRX CSV文件的问题

问题根源

原代码存在三个关键问题:

  • 请求GenerateOTP和download_csv接口时错误使用application/json类型,而KRX接口实际接受**表单格式(x-www-form-urlencoded)**的请求体
  • 传递OTP时直接传入HTTP响应对象,而非提取响应文本内容
  • KRX返回的CSV采用EUC-KR编码,直接用getContentText()会因编码不匹配导致乱码

修改后的代码

function myFunction() {
  // 1. 获取OTP
  var gen_otp_url = 'http://data.krx.co.kr/comm/fileDn/GenerateOTP/generate.cmd';
  var gen_otp_data = {
    'locale': 'ko_KR',
    'mktId': 'STK',
    'trdDd': '20221205',
    'money': '1',
    'csvxls_isNo': 'false',
    'name': 'fileDown',
    'url': 'dbms/MDC/STAT/standard/MDCSTAT03901'
  };
  
  var otpOptions = {
    'method': 'post',
    'contentType': 'application/x-www-form-urlencoded', // 修正为表单格式
    'payload': gen_otp_data
  };
  
  var otpResponse = UrlFetchApp.fetch(gen_otp_url, otpOptions);
  var otp = otpResponse.getContentText().trim(); // 提取纯OTP字符串
  Logger.log('OTP: ' + otp);

  // 2. 下载并解析CSV
  var csv_url = 'http://data.krx.co.kr/comm/fileDn/download_csv/download.cmd';
  var gen_csv_data = {
    'code': otp // 传入正确的OTP字符串
  };
  
  var csvOptions = {
    'method': 'post',
    'contentType': 'application/x-www-form-urlencoded', // 统一表单格式
    'muteHttpExceptions': true,
    'payload': gen_csv_data
  };
  
  var csvResponse = UrlFetchApp.fetch(csv_url, csvOptions);
  // 转换EUC-KR编码为UTF-8文本
  var csvBytes = csvResponse.getContent();
  var csvText = Utilities.newBlob(csvBytes, 'text/csv; charset=EUC-KR').getDataAsString();
  
  Logger.log(csvText);
}

关键修改说明

  • 修正请求类型:将两个请求的contentType改为application/x-www-form-urlencoded,匹配KRX接口的参数要求
  • 正确传递OTP:通过getContentText().trim()提取纯OTP字符串,避免传递响应对象导致的参数错误
  • 编码转换:利用Utilities.newBlob将EUC-KR编码的字节数据转换为UTF-8格式,解决乱码问题

内容的提问来源于stack exchange,提问作者아잉쿠

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 01:01:12