我正在使用GMail API来检索电子邮件内容。我正在为正文获取以下base64编码数据:http://hastebin.com/ovucoranam.md
但是当我通过base64解码器运行它时,它会返回一个空字符串(错误)或者类似于HTML数据但有一堆奇怪字符的东西。
帮助?
答案 0 :(得分:20)
我不确定你是否已经解决了,但GmailGuy是正确的。您需要将正文转换为Base64 RFC 4648标准。该问题是,您需要将-
替换为+
,将_
替换为/
。
我已经接受了原始输入并进行了替换:http://hastebin.com/ukanavudaz
并使用base64decode.org对其进行解码,这很好。
答案 1 :(得分:12)
你需要使用 URL (又名" web")安全base64解码字母表(参见rfc 4648),它不会出现在你做的事情上。使用标准base64字母表有时可以工作但不总是(2个字符不同)。
Docs似乎并不一贯提到这个重要的细节。尽管如此,这是其中的一个: https://developers.google.com/gmail/api/guides/drafts
此外,如果您的特定图书馆不支持"网址安全"然后你可以先在字符串上进行字符串替换(" - "用" +"和" _"用" /" )然后对它进行正常的base64解码。
答案 2 :(得分:7)
我在解析来自Gmail API
的消息对象响应中的'data'字段时遇到了同样的问题。 Google Ruby API
库也没有正确解码文本。我发现我需要做url-safe base64 decode
:
@data = Base64.urlsafe_decode64(JSON.parse(@result.data.to_json)["payload"]["body"]["data"])
希望有所帮助!
答案 3 :(得分:1)
python 2.x和3.x有一个例子:
decodedContents = base64.urlsafe_b64decode(payload["body"]["data"].encode('ASCII'))
答案 4 :(得分:0)
如果您只需要解码以进行显示,请考虑使用atob解码JavaScript前端中的消息(请参阅ref)。
答案 5 :(得分:0)
我在玩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,2018年5月30日20:59:21
答案 6 :(得分:-1)
我将base64测试应用到文件(b64.txt),然后使用base64(来自coreutils)使用-d选项对其进行base64解码(请参阅http://linux.die.net/man/1/base64),我得到了完全可读的文本。我使用的命令是:
cat b64.txt | base64 -d