Gmail API - 如何正确解析邮件正文数据?

时间:2014-06-30 01:55:21

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

我正在使用新的Gmail API,并且绝对坚持如何正确处理Ruby / Rails中[body] [data]部分对text / plain消息和text / html消息的编码。< / p>

假设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"

3 个答案:

答案 0 :(得分:4)

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

答案 1 :(得分: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编码的字符' - '用'+'和'_'用'/'

答案 2 :(得分:0)

根据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');
};

我删除了对窗口vs模块的引用,并且还使得NodeJS实际上使用str,而不仅仅是#34; Hello World!&#34;