【问题标题】:Gmail API - how to correctly parse message body data?Gmail API - 如何正确解析邮件正文数据?
【发布时间】:2014-06-30 01:55:20
【问题描述】:

我正在使用新的 Gmail API,并且完全坚持如何正确处理 Ruby/Rails 中文本/纯文本消息和文本/html 消息的 [body][data] 部分的编码。

假设数据 = 编码的消息部分。

对其调用Base64.decode64(data).unpack("M") 会返回一个US-ASCII 编码的文本正文,其中包含许多网页上显示的缺失字符。

调用 Base64.decode64(data).encode('UTF-8') 会引发从 US-ASCII 到 UTF-8 的转换错误

但是,如果我这样做 Base64.decode64(data).encode('UTF-8', {:invalid => :replace, :undef => :replace, :replace => '?'}),我仍然会看到大量问号。

有人能指出我正确的方向吗?如何让消息正文正确编码并以 UTF-8 显示?

电子邮件 JSON 响应的格式如下:

"parts": [
   {
    "partId": "0",
    "mimeType": "text/plain",
    "filename": "",
    "headers": [
     {
      "name": "Content-Type",
      "value": "text/plain; charset=UTF-8"
     },
     {
      "name": "Content-Transfer-Encoding",
      "value": "quoted-printable"

【问题讨论】:

    标签: ruby-on-rails encoding utf-8 gmail ascii


    【解决方案1】:

    使用Base64.urlsafe_decode64 解码邮件正文。

    【讨论】:

      【解决方案2】:
      var base64toUTF8 = function base64toUTF8(str,urlsafe) {
        if(urlsafe) {
          str = str.replace(/_/g,"/");
          str = str.replace(/-/g,"+");
        }
        if(typeof window) {
          return decodeURIComponent(escape(window.atob( str )));
        }
        else if(typeof module !== 'undefined' && module.exports) {
          return new Buffer("SGVsbG8gV29ybGQ=", 'base64').toString('utf8');
        }
      };
      

      只需要将 base64 编码字符 '-' 替换为 '+' 和 '_' 替换为 '/'

      【讨论】:

      • 这看起来像 JavaScript,而不是 Ruby。
      【解决方案3】:

      根据 Bhargav Krishna 的回答,这是一个 nodeJS 友好的版本:

      var base64toUTF8 = function base64toUTF8(str, urlsafe) {
        if (urlsafe) {
          str = str.replace(/_/g,"/");
          str = str.replace(/-/g,"+");
        }
        return new Buffer(str, 'base64').toString('utf8');
      };
      

      我删除了对 window vs 模块的引用,并且还使 NodeJS 实际上使用了str,而不仅仅是“Hello World!”

      【讨论】:

      • 这看起来像 JavaScript,而不是 Ruby。
      猜你喜欢
      • 2015-06-15
      • 2018-07-28
      • 2021-04-20
      • 2021-08-13
      • 2017-10-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-12-12
      相关资源
      最近更新 更多