2015-06-18 33 views
1

我是RESTful API以及處理MIME內容的新手。我正在嘗試編寫應用程序以從Gmail郵箱中檢索郵件以進行進一步處理。GMail RESTful API: - 內容傳輸編碼分歧

我使用Google Developers API參考作爲工具來熟悉API。以下Gmail API中使用「試用」功能參考

https://developers.google.com/gmail/api/v1/reference/users/messages/get

我檢索的只是有兩行簡單的文本測試消息。第一行包含簡單的ASCII,而第二行包含一些Unicode文本。

This the first line of body text in English only 

This is second line, 中文睇到嗎 , could you see those Chinese 

並且獲得

"parts": [ 
    { 
    "partId": "0", 
    "mimeType": "text/plain", 
    "filename": "", 
    "headers": [ 
    { 
     "name": "Content-Type", 
     "value": "text/plain; charset=UTF-8" 
    }, 
    { 
     "name": "Content-Transfer-Encoding", 
     "value": "quoted-printable" 
    } 
    ], 
    "body": { 
    "size": 120, 
    "data": "VGhpcyB0aGUgZmlyc3QgbGluZSBvZiBib2R5IHRleHQgaW4gRW5nbGlzaCBvbmx5DQoNClRoaXMgaXMgc2Vjb25kIGxpbmUsIOS4reaWh-edh-WIsOWXjiAsIGNvdWxkIHlvdSBzZWUgdGhvc2UgQ2hpbmVzZQ0K" 
    } 
    }, 
    { 
    "partId": "1", 
    "mimeType": "text/html", 
    "filename": "", 
    "headers": [ 
    { 
     "name": "Content-Type", 
     "value": "text/html; charset=UTF-8" 
    }, 
    { 
     "name": "Content-Transfer-Encoding", 
     "value": "quoted-printable" 
    } 
    ], 
    "body": { 
    "size": 354, 
    "data": "PGRpdiBkaXI9Imx0ciI-PGRpdiBjbGFzcz0iZ21haWxfZGVmYXVsdCIgc3R5bGU9ImZvbnQtZmFtaWx5OnRhaG9tYSxzYW5zLXNlcmlmIj5UaGlzIHRoZSBmaXJzdCBsaW5lIG9mIGJvZHkgdGV4dCBpbiBFbmdsaXNoIG9ubHk8L2Rpdj48ZGl2IGNsYXNzPSJnbWFpbF9kZWZhdWx0IiBzdHlsZT0iZm9udC1mYW1pbHk6dGFob21hLHNhbnMtc2VyaWYiPjxicj48L2Rpdj48ZGl2IGNsYXNzPSJnbWFpbF9kZWZhdWx0IiBzdHlsZT0iZm9udC1mYW1pbHk6dGFob21hLHNhbnMtc2VyaWYiPlRoaXMgaXMgc2Vjb25kIGxpbmUsIOS4reaWh-edh-WIsOWXjiAsIGNvdWxkIHlvdSBzZWUgdGhvc2UgQ2hpbmVzZTwvZGl2PjwvZGl2Pg0K" 
    } 
    } 
    ] 

正如你可以看到以下的響應,而「內容傳輸編碼」被指定爲返回「引用可打印」的實際數據是在base64url編碼。

當我使用我的測試腳本通過GMail RESTful API檢索消息時,獲得相同的64baseurl編碼響應。

所以我的問題是爲什麼標題中的「content-transfer-encoding」與實際的編碼響應之間存在分歧?我忽略了一些東西,還是有一些額外的參數/請求使其正確?

感謝

編輯:基於從@EricDeFriez

的評論如果我base64url的 '數據' 字段

"VGhpcyB0aGUgZmlyc3QgbGluZSBvZiBib2R5IHRleHQgaW4gRW5nbGlzaCBvbmx5DQoNClRoaXMgaXMgc2Vjb25kIGxpbmUsIOS4reaWh-edh-WIsOWXjiAsIGNvdWxkIHlvdSBzZWUgdGhvc2UgQ2hpbmVzZQ0K" 

解碼看來結果已經是原來的UTF8編碼的文本:

This the first line of body text in English only 

This is second line, 中文睇到嗎 , could you see those Chinese 

如果是「引用打印」編碼,則結果爲o ˚Fbase64url解碼應該是這樣的:

This the first line of body text in English only 

This is second line, =E4=B8=AD=E6=96=87=E7=9D=87=E5=88=B0=E5=97=8E , could = 
you see those Chinese 

看來,在JSON響應的「引用可打印」 CTE頭是不正確的。無論在CTE頭中指定什麼,數據字段始終是base64url編碼。

你知道原因嗎?

回答

1

「data」字段對於通過JSON本地傳輸並不一定安全,因此它始終是base64url編碼的。一旦你base64url解碼'數據'它應該匹配的CTE頭。

+0

埃裏克感謝您的回覆。我發現一些進一步的問題。請參閱我上面的編輯。謝謝 – gatek