gpt4 book ai didi

javascript - 当涉及特殊字符时,解压缩字符串(来自 gzcompress)会返回错误结果

转载 作者:行者123 更新时间:2023-11-28 06:06:32 24 4
gpt4 key购买 nike

我正在尝试用 js 编写一个前端应用程序,并且我正在从网络服务器获取我的数据(I❤U\n😘😘😘)。

jsFiddle https://jsfiddle.net/czmovg26/1/

网络服务器:

<?php
print($compressed = base64_encode(gzcompress('I\u2764U\n\uD83D\uDE18\uD83D\uDE18\uD83D\uDE18', 6)));
?>

前端:

var b64Data = "eJzzjCk1MjczCY3Jiyl1sTB2AZKuhha42ABGUQ2i"; // === I❤U\n😘😘😘

// Decode base64 (convert ascii to binary)
var strData = atob(b64Data);
// Convert binary string to character-number array
var charData = strData.split('').map(function (x) {
return x.charCodeAt(0);
});
// Turn number array into byte-array
var binData = new Uint8Array(charData);
// Pako magic
var data = pako.inflate(binData);
// Convert gunzipped byteArray back to ascii string:
var decoded = String.fromCharCode.apply(null, new Uint8Array(data));

var r = /\\u([\d\w]{4})/gi;
decoded = decoded.replace(r, function(match, grp) {
return String.fromCharCode(parseInt(grp, 16));
});
decoded = unescape(decoded);

现在,当您在控制台中打印该字符串时,它看起来是一样的,但是

console.log(decoded == "I❤U\n😘😘😘");

返回 false,以及诸如

var val = decoded.replace(RegExp("\n","g"), "<br>");

不工作。

解压肯定是问题所在,因为它对于普通字符串工作正常,但我不明白,解压出了什么问题。

最佳答案

在 JavaScript 中,带有 \n 的字符串表示一个新行,如果您要将这样的字符串记录到控制台,您会看到它分成多行。
如果您查看解码字符串的日志,您会注意到它在一行上。

这意味着您的原始字符串中没有新行。
从你的php你可以很清楚地看到这一点。在 php 中,转义斜杠仅转义单引号 php 字符串中的单引号,因此对于表示换行符的 \n 来说,它必须位于双引号字符串内。

<?php
print($compressed = base64_encode(gzcompress("I\u2764U\n\uD83D\uDE18\uD83D\uDE18\uD83D\uDE18", 6)));

关于javascript - 当涉及特殊字符时,解压缩字符串(来自 gzcompress)会返回错误结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36814908/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com