base64 编码数据特殊符号用 atob 解析出错

发布于 2022-08-28 11:55:54 字数 444 浏览 25 评论 0

我通过 GitHub API 获取 README, 这里的 README 是经过 Base64 编码的,
https://api.github.com/repos/Cirru/cirru.org/readme
于是我找到了 atob 函数, 直接对 Base64 的字符串进行解析

解析之后, 我发现代码里这样一行:

IPA: /ˈsɪɹə/

对应原先的内容是:

IPA: /ˈsɪɹə/

另外特殊字符 ➤➤ 解析结果也出错了..

请问编码错误出现在哪, 怎样修复?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

娇俏 2022-09-04 11:55:54

问题问太快了, 在 MDN 上边很快搜到了答案...
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Base64_encoding_and_decoding

function utf8_to_b64( str ) {
  return window.btoa(unescape(encodeURIComponent( str )));
}

function b64_to_utf8( str ) {
  return decodeURIComponent(escape(window.atob( str )));
}

// Usage:
utf8_to_b64('✓ à la mode'); // "4pyTIMOgIGxhIG1vZGU="
b64_to_utf8('4pyTIMOgIGxhIG1vZGU='); // "✓ à la mode"

似乎 GitHub 已经做了对应的处理了, 于是我只要把:

atob(str)

替换成

decodeURIComponent(escape(atob(str)))

解码就成功了...

離殇 2022-09-04 11:55:54

编码弄错了:

>>> 'IPA: /ˈsɪɹə/'.encode('latin1').decode('utf-8')
'IPA: /ˈsɪɹə/'
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文