如何对JavaScript中的表情符号进行base64编码?

时间:2019-06-18 11:08:26

标签: javascript encoding 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对其进行解码时,表情符号会再次出现吗?

谢谢!

2 个答案:

答案 0 :(得分:1)

您可以先将其转义,然后再调用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

答案 1 :(得分:1)

使用js-base64库作为

var str = "I was funny ?";
console.log("Original string:", str);

var encodedStr = Base64.encode(str)
console.log("Encoded string:", encodedStr);

var decodedStr = Base64.decode(encodedStr)
console.log("Decoded string:", decodedStr);
<script src="https://cdn.jsdelivr.net/npm/js-base64@2.5.2/base64.min.js"></script>