我正在使用新的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"
答案 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;