URL-R 的安全 base64 解码

URL-safe base64 decoding for R

我不知道是不是 R 出了名的难搜索,但我似乎找不到 URL-安全的 R base64 解码器。

有人知道吗?

编辑我用过各种解码器,RCurl::base64decode()功能和网上的,结果有些不一致。

我承认我不了解区分 "URL-safe" base64 解码器的全部细节,但发现由于版主对我的误解,我的问题在几分钟内就被关闭了,这是不屑一顾的在任何人有机会回答之前询问。

编辑 2 Python 中的等价物是 base64.urlsafe_b64decode(s),到目前为止还没有人在 R 中实现它。

按照评论中的建议使用 library(sos) 会产生 3 个包,并且正如预期的那样,Google 搜索会找到它们 URL-safe 方法。

Python 文档解释了 URL 安全字母表

substitutes - instead of + and _ instead of / in the standard Base64 alphabet.

我很想知道如何使用自定义字母表。如果我理解正确,'raw' 模式已经应用了字母表,因此翻译错误。

上面的示例是我通过 Gmail API 检索到的一封电子邮件的正文,它使用 URL 安全编码器进行 base64 编码:

PGRpdiBkaXI9Imx0ciI-SGksPGJyPjxicj5JIGNhbiYjMzk7dCBpbnN0YWxsIHhwcyBiZWNhdXNlIGR1cmluZyBjb21waWxlIEkgZ2V0OjxkaXY-PGJyPjwvZGl2PjxkaXY-PGZvbnQgZmFjZT0ibW9ub3NwYWNlLCBtb25vc3BhY2UiPlRNTE1hdGguY3h4OjUxOjE5OiBmYXRhbCBlcnJvcjogVE1hdGguaDogTm8gc3VjaCBmaWxlIG9yIGRpcmVjdG9yeTxicj48L2ZvbnQ-PC9kaXY-PGRpdj48Zm9udCBmYWNlPSJtb25vc3BhY2UsIG1vbm9zcGFjZSI-PGJyPjwvZm9udD48L2Rpdj48ZGl2PjxkaXY-PGZvbnQgZmFjZT0ibW9ub3NwYWNlLCBtb25vc3BhY2UiPsKgI2luY2x1ZGUgJnF1b3Q7VE1hdGguaCZxdW90OzwvZm9udD48L2Rpdj48ZGl2Pjxmb250IGZhY2U9Im1vbm9zcGFjZSwgbW9ub3NwYWNlIj7CoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoF48L2ZvbnQ-PC9kaXY-PGRpdj48Zm9udCBmYWNlPSJtb25vc3BhY2UsIG1vbm9zcGFjZSI-Y29tcGlsYXRpb24gdGVybWluYXRlZC48L2ZvbnQ-PC9kaXY-PGRpdj48Zm9udCBmYWNlPSJtb25vc3BhY2UsIG1vbm9zcGFjZSI-bWFrZTogKioqIFtUTUxNYXRoLm9dIEVycm9yIDE8L2ZvbnQ-PC9kaXY-PGRpdj48Zm9udCBmYWNlPSJtb25vc3BhY2UsIG1vbm9zcGFjZSI-RVJST1I6IGNvbXBpbGF0aW9uIGZhaWxlZCBmb3IgcGFja2FnZSDigJh4cHPigJk8L2ZvbnQ-PC9kaXY-PC9kaXY-PGRpdj48YnI-PGZvbnQgZmFjZT0iYXJpYWwsIGhlbHZldGljYSwgc2Fucy 1zZXJpZiI-RG8geW91IGhhdmUgYW55IGlkZWEgd2hlcmUgSSYjMzk7dmUgZ29uZSB3cm9uZywgb3IgaG93IEkgbWlnaHQgZml4IGl0PyBGdXJ0aGVyIGRldGFpbHMgb2YgaG93IEkgd2VudCBhYm91dCBpdCBhcmUgPGEgaHJlZj0iaHR0cHM6Ly9naXRodWIuY29tL2xtbXgvZGV2bm90ZXMvd2lraS9JbnN0YWxsaW5nLUNFUk4mIzM5O3MtUk9PVC1mcmFtZXdvcmsiPmhlcmU8L2E-wqBhbmQgZnVsbCBzY3JlZW5zaG90IGF0dGFjaGVkLjwvZm9udD48L2Rpdj48ZGl2Pjxmb250IGZhY2U9ImFyaWFsLCBoZWx2ZXRpY2EsIHNhbnMtc2VyaWYiPjxicj48L2ZvbnQ-PC9kaXY-PGRpdj48Zm9udCBmYWNlPSJhcmlhbCwgaGVsdmV0aWNhLCBzYW5zLXNlcmlmIj5JIHRyaWVkIG1hbnVhbGx5IGFkZGluZyBpbiB0aGUgZmlsZXMgdGhlIGVycm9yIG1lc3NhZ2Ugc2FpZCB3ZXJlIG1pc3NpbmcsIGJ1dCBldmVudHVhbGx5IGl0IGdhdmUgYSBkaWZmZXJlbnQga2luZCBvZiBlcnJvciBhbmQgSSBkZWxldGVkIHRoZXNlIGFkZGl0aW9uYWwgZmlsZXMgYWdhaW4gKHNlZSB0aGUgbGluayBhYm92ZSkuPC9mb250PjwvZGl2PjxkaXY-PGZvbnQgZmFjZT0iYXJpYWwsIGhlbHZldGljYSwgc2Fucy1zZXJpZiI-PGJyPjwvZm9udD48L2Rpdj48ZGl2Pjxmb250IGZhY2U9ImFyaWFsLCBoZWx2ZXRpY2EsIHNhbnMtc2VyaWYiPkkgaG9wZSB5b3UgbWF5IGJlIGFibGUgdG8gYWR2aXNlLCBJJiMzOTt2ZSBydW4gb3V0IG9mIGlkZWFzIGFuZCBleHBlcn Rpc2Ugb24gaG93IGVsc2UgdG8gcHJvY2VlZC48L2ZvbnQ-PC9kaXY-PGRpdj48Zm9udCBmYWNlPSJhcmlhbCwgaGVsdmV0aWNhLCBzYW5zLXNlcmlmIj48YnI-PC9mb250PjwvZGl2PjxkaXY-PGZvbnQgZmFjZT0iYXJpYWwsIGhlbHZldGljYSwgc2Fucy1zZXJpZiI-QmVzdCB3aXNoZXMsPC9mb250PjwvZGl2PjxkaXY-PGZvbnQgZmFjZT0iYXJpYWwsIGhlbHZldGljYSwgc2Fucy1zZXJpZiI-PGJyPjwvZm9udD48L2Rpdj48ZGl2Pjxmb250IGZhY2U9ImFyaWFsLCBoZWx2ZXRpY2EsIHNhbnMtc2VyaWYiPkxvdWlzPC9mb250PjwvZGl2PjwvZGl2Pg0K

在线 URL 安全解码器将给出

<div dir="ltr">Hi,<br><br>I can't install xps because during compile I get:<div><br></div><div><font face="monospace, monospace">TMLMath.cxx:51:19: fatal error: TMath.h: No such file or directory<br></font></div><div><font face="monospace, monospace"><br></font></div><div><div><font face="monospace, monospace"> #include "TMath.h"</font></div><div><font face="monospace, monospace">                   ^</font></div><div><font face="monospace, monospace">compilation terminated.</font></div><div><font face="monospace, monospace">make: *** [TMLMath.o] Error 1</font></div><div><font face="monospace, monospace">ERROR: compilation failed for package ‘xps’</font></div></div><div><br><font face="arial, helvetica, sans-serif">Do you have any idea where I've gone wrong, or how I might fix it? Further details of how I went about it are <a href="https://github.com/lmmx/devnotes/wiki/Installing-CERN's-ROOT-framework">here</a> and full screenshot attached.</font></div><div><font face="arial, helvetica, sans-serif"><br></font></div><div><font face="arial, helvetica, sans-serif">I tried manually adding in the files the error message said were missing, but eventually it gave a different kind of error and I deleted these additional files again (see the link above).</font></div><div><font face="arial, helvetica, sans-serif"><br></font></div><div><font face="arial, helvetica, sans-serif">I hope you may be able to advise, I've run out of ideas and expertise on how else to proceed.</font></div><div><font face="arial, helvetica, sans-serif"><br></font></div><div><font face="arial, helvetica, sans-serif">Best wishes,</font></div><div><font face="arial, helvetica, sans-serif"><br></font></div><div><font face="arial, helvetica, sans-serif">Louis</font></div></div>

RCurl 函数给出了截断和不完整的解码:

<div dir=\"lt[=29=]1ȈHi,<br><br>I can't install xps because during compile I get:<d[=29=]1\xa5\xd8<br></div><d[=29=]1\xa5\xd8<font face=\"monospace, monospace\">TMLMath.cxx:51:19: fatal error: TMath.h: No such file or directory<br></fo[=29=]1\xb9\xd0</d[=29=]1\xa5\xd8<div><font face=\"monospace, monospac[=29=]1\x94\x88<br></font></div><div><d[=29=]1\xa5\xd8<font face=\"monospace, monospace\"> #include "TMath.h"</font></div><div><font face=\"monospace, monospace\"> ^</fo[=29=]1\xb9\xd0</d[=29=]1\xa5\xd8<div><font face=\"monospace, monospac[=29=]1\x94\x88compilation terminated.</fo[=29=]1\xb9\xd0</d[=29=]1\xa5\xd8<div><font face=\"monospace, monospac[=29=]1\x94\x88make: *** [TMLMath.o] Error 1</fo[=29=]1\xb9\xd0</d[=29=]1\xa5\xd8<div><font face=\"monospace, monospac[=29=]1\x94\x88ERROR: compilation failed for package ‘xps’</fo[=29=]1\xb9\xd0</d[=29=]1\xa5\xd8</d[=29=]1\xa5\xd8<div><[=29=]1\x89\xc8<font face=\"arial, helvetica, sans-seri[=29=]1\x98\x88Do you have any idea where I've gone wrong, or how I might fix it? Further details of how I went about it are <a href=\"https://github.com/lmmx/devnotes/wiki/Installing-CERN's-ROOT-framework\">here<

而我用的online base64 decoder根本不会解码,报错

如果没有人知道如何使用现有的 R 包执行此操作,我将不得不自己编写一些内容来使用自定义字母表。如果可能的话,我宁愿不必调用 Python。

好吧……这太容易了。

base64Decode(gsub("-","+",gsub("/","_",strtodecode)))

很抱歉回答我自己的问题,它似乎比实际情况要复杂得多

编辑 对于我正在处理的情况,这实际上必须是 base64Decode(gsub("-","+",gsub("_","/",strtodecode))),但举个例子,上面的工作 - 有多个 base64 字母表。