Ich versuche, eine Front-End-Anwendung in js zu schreiben, und ich bekomme meine Daten (IU \ n) von einem Webserver.Dekomprimieren String (von gzcompress) gibt falsches Ergebnis zurück, wenn spezielle Zeichen beteiligt sind
jsFiddle https://jsfiddle.net/czmovg26/1/
Webserver:
<?php
print($compressed = base64_encode(gzcompress('I\u2764U\n\uD83D\uDE18\uD83D\uDE18\uD83D\uDE18', 6)));
?>
Frontend:
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);
Jetzt sieht die Zeichenfolge das gleiche, wenn Sie es in der Konsole zu drucken, aber
console.log(decoded == "I❤U\n");
Resturns falsch, und Dinge wie
var val = decoded.replace(RegExp("\n","g"), "<br>");
funktionieren nicht.
Die Dekomprimierung muss das Problem sein, wie es mit einer normalen Zeichenfolge funktioniert, aber ich verstehe nicht, was mit der Dekomprimierung falsch ist.
'console.log (dekodiert ==" I❤U \\ n ");' –