I'm using the GMail API to retrieve an email contents. I am getting the following base64 encoded data for the body: http://hastebin.com/ovucoranam.md
しかし、base64 デコーダーを介して実行すると、空の文字列 (エラー) が返されるか、HTML データに似ているが奇妙な文字がたくさん含まれているものが返されます。
ヘルプ?
I'm using the GMail API to retrieve an email contents. I am getting the following base64 encoded data for the body: http://hastebin.com/ovucoranam.md
しかし、base64 デコーダーを介して実行すると、空の文字列 (エラー) が返されるか、HTML データに似ているが奇妙な文字がたくさん含まれているものが返されます。
ヘルプ?
まだ解決したかどうかわかりませんが、GmailGuy は正しいです。本文を Base64 RFC 4648 標準に変換する必要があります。ジストは、 と-
に置き換える必要があるということです。+
_
/
私はあなたの元の入力を取り、置き換えを行いました: http://hastebin.com/ukanavudaz
base64decode.org を使用してデコードしましたが、問題ありませんでした。
URL (別名「Web」)の安全なbase64デコードアルファベット(rfc 4648を参照)を使用する必要がありますが、これはあなたがしているようには見えません。標準の base64 アルファベットを使用すると、場合によっては機能する場合がありますが、常に機能するとは限りません (2 文字が異なります)。
ドキュメントは、この重要な詳細について一貫して言及していないようです。ただし、それが行われる場所は次のとおりです。 https://developers.google.com/gmail/api/guides/drafts
また、特定のライブラリが「URLセーフ」アルファベットをサポートしていない場合は、最初に文字列の文字列置換を行い(「-」を「+」に、「_」を「/」に)、次に通常のbase64デコードを行うことができますそれ。
からのメッセージオブジェクト応答の「データ」フィールドをデコードするときに同じ問題がありましたGmail API
。Google Ruby API
ライブラリもテキストを正しくデコードしていませんでした。私はする必要があることがわかりましたurl-safe base64 decode
:
@data = Base64.urlsafe_decode64(JSON.parse(@result.data.to_json)["payload"]["body"]["data"])
それが役立つことを願っています!
Python 2.x および 3.x の例があります。
decodedContents = base64.urlsafe_b64decode(payload["body"]["data"].encode('ASCII'))
表示目的でのみデコードする必要がある場合は、atob を使用して JavaScript フロントエンドでメッセージをデコードすることを検討してください ( refを参照)。
API の結果をいじっているときに、ボディにドリルダウンすると、利用可能なメソッドでデコードするオプションが与えられたことがわかりました。
val message = mService!!.users().messages().get(user, id).setFormat("full").execute()
println("Message snippet: " + message.snippet)
if(message.payload.mimeType == "text/plain"){
val body = message.payload.body.decodeData() // getValue("body")
Log.i("BODY", body.toString(Charset.defaultCharset()))
}
結果:-
com.example.quickstart I/BODY: ISOLATE NORMAL: 514471,Fap, South Point Rolleston, 55 Faringdon Boulevard , Rolleston, 30 May 2018 20:59:21
base64 テストをファイル (b64.txt) に対処し、base64 (coreutils から) を -d オプション付きで使用して base64 デコードし ( http://linux.die.net/man/1/base64を参照)、完全に読みやすいテキストを取得しました。私が使用したコマンドは次のとおりです。
cat b64.txt | base64 -d