【发布时间】:2014-09-08 19:58:37
【问题描述】:
我正在使用 GMail API 来检索电子邮件内容。我正在为正文获取以下 base64 编码数据:http://hastebin.com/ovucoranam.md
但是当我通过 base64 解码器运行它时,它要么返回一个空字符串(错误),要么返回类似于 HTML 数据但带有一堆奇怪字符的东西。
帮助?
【问题讨论】:
标签: email character-encoding base64 mime gmail-api
我正在使用 GMail API 来检索电子邮件内容。我正在为正文获取以下 base64 编码数据:http://hastebin.com/ovucoranam.md
但是当我通过 base64 解码器运行它时,它要么返回一个空字符串(错误),要么返回类似于 HTML 数据但带有一堆奇怪字符的东西。
帮助?
【问题讨论】:
标签: email character-encoding base64 mime gmail-api
我在使用 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
【讨论】:
您需要使用 URL(又名“web”)安全 base64 解码字母表(请参阅 rfc 4648),您似乎没有这样做。使用标准 base64 字母有时可能会起作用,但并非总是如此(其中 2 个字符不同)。
文档似乎并没有一致地提到这个重要的细节。这是它的一个地方: https://developers.google.com/gmail/api/guides/drafts
此外,如果您的特定库不支持“URL 安全”字母表,那么您可以先对字符串进行字符串替换(“-”与“+”,“_”与“/”),然后正常执行base64解码就可以了。
【讨论】:
NSData initWithBase64EncodedString:options: 方法。它没有提到任何关于 URL 安全字母表的内容?
有一个python 2.x和3.x的例子:
decodedContents = base64.urlsafe_b64decode(payload["body"]["data"].encode('ASCII'))
【讨论】:
如果您只需要为了显示目的进行解码,请考虑使用 atob 对 JavaScript 前端中的消息进行解码(请参阅ref)。
【讨论】:
我在解码来自Gmail API 的消息对象响应中的“数据”字段时遇到了同样的问题。 Google Ruby API 库也没有正确解码文本。我发现我需要做一个url-safe base64 decode:
@data = Base64.urlsafe_decode64(JSON.parse(@result.data.to_json)["payload"]["body"]["data"])
希望有帮助!
【讨论】:
我不确定你是否已经解决了,但 GmailGuy 是正确的。您需要将正文转换为 Base64 RFC 4648 标准。要点是您需要将- 替换为+,将_ 替换为/。
我已采用您的原始输入并进行了替换:http://hastebin.com/ukanavudaz
并用base64decode.org解码,还好。
【讨论】:
我将 base64 测试处理为一个文件 (b64.txt),然后使用带有 -d 选项的 base64(来自 coreutils)对其进行 base64 解码(请参阅http://linux.die.net/man/1/base64),我得到了完全可读的文本。我使用的命令是:
cat b64.txt | base64 -d
【讨论】: