jsでフロントエンドアプリケーションを作成しようとしていますが、Webサーバーから自分のデータ(I assignU \ n)を取得しています。特殊文字が含まれていると、gzcompressの文字列を解凍すると間違った結果が返されます
jsFiddle https://jsfiddle.net/czmovg26/1/
Webサーバ:
<?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>");
のようなものは機能しません。
通常の文字列で正常に機能するので、解凍が問題である必要がありますが、解凍に何が問題なのか分かりません。
'console.log(decoded =="I❤U\\ n ");' –