1
我正試圖在js中編寫一個前端應用程序,並且正從Web服務器獲取我的數據(I❤U\ n)。當涉及特殊字符時,解壓縮字符串(來自gzcompress)返回錯誤結果
的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");
恢復虛假,並且像
var val = decoded.replace(RegExp("\n","g"), "<br>");
不起作用。
解壓縮必須是問題,因爲它可以正常工作,但我不明白,解壓出了什麼問題。
'console.log(decoded ==「I❤U\\ n」);'' –