首页 > 解决方案 > 如何在 JavaScript 中对表情符号进行 base64 编码?

问题描述

我一直在尝试将 twitter 嵌入代码编码到 base64 中,该代码可能包含也可能不包含一个或多个表情符号。因此,当字符串中有表情符号时,我会收到此错误: Uncaught DOMException: Failed to execute 'btoa' on 'Window': The string to be encoded contains characters outside of the Latin1 range.

有什么我可以做的,当我在我的字符串上运行 btoa() 时,它会编码整个字符串,包括表情符号,当我在 php 中使用 base64_decode 对其进行解码时,表情符号会再次出现?

提前致谢!

标签: javascriptencodingbase64

解决方案


您可以通过先对其进行转义然后在其上调用 EncodeUriComponent 来对其进行编码。

这看起来像这样:

btoa(unescape(encodeURIComponent('')));

上面的表情符号将返回“8J+Ygg==”

要解码它,你会这样做

decodeURIComponent(escape(window.atob('8J+Ygg==')));

您可以创建两个函数来简化此操作:

//Encode
function utoa(str) {
    return window.btoa(unescape(encodeURIComponent(str)));
}
//Decode
function atou(str) {
    return decodeURIComponent(escape(window.atob(str)));
}

来源: https ://developer.mozilla.org/en-US/docs/Web/API/WindowOrWorkerGlobalScope/btoa


推荐阅读