2016-04-06 10 views
1

Gmail APIを使用してサーバーからメッセージを取得しています。長いjson配列を返します。私はこのコードを使用して問題なく解析することができます最初の1GMail APIによって返されたmessage.partsをどのようにデコードするのですか?

"parts": [ 
    { 
    "partId": "0", 
    "mimeType": "text/plain", 
    "filename": "", 
    "headers": [ 
    { 
     "name": "Content-Type", 
     "value": "text/plain; charset=UTF-8" 
    } 
    ], 
    "body": { 
    "size": 91, 
    "data": "dGVzdA0KLS0NCkRhd2lkIChSZXluZXZhbikgU2VyYWZpbg0KKmh0dHA6Ly93d3cucmV5bmV2YW4uY29tLyA8aHR0cDovL3d3dy5yZXluZXZhbi5jb20vPioNCg==" 
    } 
    }, 
    { 
    "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": 391, 
    "data": "PGRpdiBkaXI9Imx0ciI-dGVzdDxiciBjbGVhcj0iYWxsIj48ZGl2PjxkaXYgY2xhc3M9ImdtYWlsX3NpZ25hdHVyZSI-PGRpdiBkaXI9Imx0ciI-PGRpdj48Zm9udCBmYWNlPSJjb21pYyBzYW5zIG1zLCBzYW5zLXNlcmlmIj4tLTwvZm9udD48L2Rpdj48Zm9udCBmYWNlPSJjb21pYyBzYW5zIG1zLCBzYW5zLXNlcmlmIj5EYXdpZCAoUmV5bmV2YW4pIFNlcmFmaW48L2ZvbnQ-PGRpdj48Zm9udCBmYWNlPSJjb21pYyBzYW5zIG1zLCBzYW5zLXNlcmlmIj48Yj48aT48YSBocmVmPSJodHRwOi8vd3d3LnJleW5ldmFuLmNvbS8iIHRhcmdldD0iX2JsYW5rIj5odHRwOi8vd3d3LnJleW5ldmFuLmNvbS88L2E-PC9pPjwvYj48L2ZvbnQ-PC9kaXY-PC9kaXY-PC9kaXY-PC9kaXY-DQo8L2Rpdj4NCg==" 
    } 
    } 
    ] 

:ここに関連する部分です

foreach (Match b in body) 
{ 
    var raw = b.Groups[1].Value; 
    var bytes = Convert.FromBase64String(raw); 
    var s = Encoding.UTF8.GetString(bytes); 
    bodyDecoded += s; 
} 

が、もう一つは最初よりも違って見えると、このコードはFormatExceptionをスローします。

どうすればよいですか?これはまだbase64ですか?おそらく私はダッシュを削除する必要がありますか?

編集:ここでは別の文字列です:R3JlZywgdGhlIE5pa2UgQWlyIE1heCAxIFYgU1AgJ1BhdGNoJyBoYXMgZHJvcHBlZCDigJMgaGVyZSdzIHlvdXIgcHVyY2hhc2UNCmxpbmsuDQo8aHR0cHM6Ly9sYXVuY2hlcy5lbmRjbG90aGluZy5jb20vPg0KTmlrZSBBaXIgTWF4IDEgViBTUCAnUGF0Y2gnDQoNClNhbmQNCltpbWFnZTogUHJvZHVjdCBpbWFnZV0NCg0KRFJPUFMgSU4NCg0KKjAwKiBkYXlzIDogKjAwKiBocnMgOiAqMDAqIG1pbnMgOiAqMDAqIHNlY3MNCg0KUGxlYXNlIGNsaWNrIHRoZSBsaW5rIGJlbG93IHRvIGpvaW4gdGhlIHF1ZXVlIGZvciBwdXJjaGFzaW5nIHRoaXMgcHJvZHVjdC4NClJlbWVtYmVyIHRvIGh1cnJ5IC0gc3RvY2sgaXMgYWxsb2NhdGVkIG9uIGEgZmlyc3QgY29tZSBmaXJzdCBzZXJ2ZSBiYXNpcy4NCkNsaWNraW5nIHRoaXMgbGluayBkb2VzIG5vdCBndWFyYW50ZWUgcHVyY2hhc2UuDQpDbGljayBIZXJlDQo8aHR0cHM6Ly9sYXVuY2hlcy5lbmRjbG90aGluZy5jb20vIy9jaGVja291dC9rMnZ4a243bjYyMXk3NjF5dHA0dDJjbXB5N2ZjZTYwcnlqYzd4OWp0L2xvZ2luPg0KRU5ELg0KVW5pdCBDIE1lcmxpbiBXYXkNCk5ld2Nhc3RsZSBVcG9uIFR5bmUNCk5FMjcgMFFHDQorNDQgKDApMzMzIDMyMyA3NzI4DQppbmZvQGVuZGNsb3RoaW5nLmNvbQ0KW2ltYWdlOiBGYWNlYm9va10gW2ltYWdlOiBHb29nbGUrXSBbaW1hZ2U6IEluc3RhZ3JhbV0gW2ltYWdlOiBUd2l0dGVyXQ0K

EDITエセル

によると、これは答えで私のコードは、(フィルタリング)

XXXXXX, the XXXXXX 1 V SP 'Patch' has dropped – here's your purchase 
link. 
<https://launches.XXXXXXXX.com/> 
XXXXXX 1 V SP 'Patch' 

Sand 
[image: Product image] 

DROPS IN 

*00* days : *00* hrs : *00* mins : *00* secs 

Please click the link below to join the queue for purchasing this product. 
Remember to hurry - stock is allocated on a first come first serve basis. 
Clicking this link does not guarantee purchase. 
Click Here 
<https://launches.XXXXXXX.com/#/checkout/XXXX/login> 
END. 
XXXXXXXXXXXXXXXXXXXXXx 
XXXXXXXXXXXXXXXXXXXX 
NE27 0QG 
+44 (0)XXX XXX XXXX 
[email protected] 
[image: Facebook] [image: Google+] [image: Instagram] [image: Twitter] 

答えて

2

-が有効base64ではない作り出すものですchar ...その文字を使用する理由はわかりませんが、-+に置き換えれば、正しいhtmlを得ることができます。

string data = "PGRpdiBkaXI9Imx0ciI-dGVzdDxiciBjbGVhcj0iYWxsIj48ZGl2PjxkaXYgY2xhc3M9ImdtYWlsX3NpZ25hdHVyZSI-PGRpdiBkaXI9Imx0ciI-PGRpdj48Zm9udCBmYWNlPSJjb21pYyBzYW5zIG1zLCBzYW5zLXNlcmlmIj4tLTwvZm9udD48L2Rpdj48Zm9udCBmYWNlPSJjb21pYyBzYW5zIG1zLCBzYW5zLXNlcmlmIj5EYXdpZCAoUmV5bmV2YW4pIFNlcmFmaW48L2ZvbnQ-PGRpdj48Zm9udCBmYWNlPSJjb21pYyBzYW5zIG1zLCBzYW5zLXNlcmlmIj48Yj48aT48YSBocmVmPSJodHRwOi8vd3d3LnJleW5ldmFuLmNvbS8iIHRhcmdldD0iX2JsYW5rIj5odHRwOi8vd3d3LnJleW5ldmFuLmNvbS88L2E-PC9pPjwvYj48L2ZvbnQ-PC9kaXY-PC9kaXY-PC9kaXY-PC9kaXY-DQo8L2Rpdj4NCg=="; 

var base64 = Convert.FromBase64String(data.Replace("-", "+")); 
var str = Encoding.UTF8.GetString(base64); 

結果:

<div dir="ltr">test<br clear="all"><div><div class="gmail_signature"><div dir="ltr"><div><font face="comic sans ms, sans-serif">--</font></div><font face="comic sans ms, sans-serif">Dawid (Reynevan) Serafin</font><div><font face="comic sans ms, sans-serif"><b><i><a href="http://www.reynevan.com/" target="_blank">http://www.reynevan.com/</a></i></b></font></div></div></div></div> </div>

+0

私はちょうどそれをしたし、まだ正しく – Reynevan

+0

@Reynevanデータは、あなたの質問の場合と同じであり、それは、HTML上に生成動作するようには思えません。何がうまくいかない?どのようなエラーが出ますか? – Eser

+0

同じもの。 'FormatException'です。ここに私が送った別のメールがあります。このメールには、最後に '='/'=='がありません。手動で追加する必要がありますか? – Reynevan

関連する問題