Décompresser gzip et zlib chaîne de caractères en javascript
Je veux obtenir de compresser les données de la couche de fichier tmx . Qui sait bibliothèques pour décompresser gzip et zlib chaîne de caractères en javascript ? J'essaie zlib mais il ne fonctionne pas pour moi . Ex , la couche de données dans le fichier tmx est :
<data encoding="base64" compression="zlib">
eJztwTEBAAAAwqD1T20JT6AAAHgaCWAAAQ==
</data>
Mon code javascript est
var base64Data = "eJztwTEBAAAAwqD1T20JT6AAAHgaCWAAAQ==";
var compressData = atob(base64Data);
var inflate = new Zlib.Inflate(compressData);
var output = inflate.decompress();
Il fonctionne avec affiche le message d'erreur "unsupported méthode de compression" . Mais j'essaie de décompresser avec un outil en ligne comme http://i-tools.org/gzip , elle renvoie la chaîne correcte.
Merci pour la question (même si l'encodage des données compressées en base64 semble un peu pervers dans ce base64 est un négatif-format de compression; je peux voir les applications...)
OriginalL'auteur Toan Nguyen | 2013-01-31
Vous devez vous connecter pour publier un commentaire.
Pako est un complet et moderne
Zlib
port.Voici un exemple très simple et vous pouvez travailler à partir de là.
Obtenir pako.js et vous pouvez décompresser byteArray comme suit:
Exemple: http://jsfiddle.net/9yH7M/
Sinon, vous pouvez encoder en base64 le tableau avant de l'envoyer sur le Tableau prend beaucoup de surcharge lors de l'envoi de JSON ou XML. Décoder de la même manière:
Exemple: http://jsfiddle.net/9yH7M/1/
Pour aller plus avancé, voici la
enseigne
documentation de l'API.pako
n'est pas défini. L'API a changé, peut-être, il utiliserequire
maintenant.Remarque:
String.fromCharCode.apply(null, new Uint16Array(data))
ne parvient pas pour longtemps d'entrée (Maximum de la pile des appels taille dépassait, JavaScript) qui devrait fonctionner pour plus de tableaux: stackoverflow.com/a/20604561/774398J'utilise onicos.com/staff/iz/amuse/javascript/expert/utf.txt
merci pour l'astuce @for3st
Pendant de longues chaînes, utilisez
var string = new TextDecoder("utf-8").decode(data)
comme indiqué ici: stackoverflow.com/questions/8936984/...OriginalL'auteur Redsandro
Je peux résoudre mon problème en zlib . J'ai corrigé mon code comme ci-dessous
il est à la fenêtre.atob developer.mozilla.org/en-US/docs/Web/API/Window.atob
OriginalL'auteur Toan Nguyen
Pour toute personne utilisant Ruby on Rails, qui veut envoyer compressé des données codées pour le navigateur, puis décompressez-le via Javascript sur le navigateur, j'ai combiné les deux d'excellentes réponses ci-dessus dans la solution suivante. Voici le serveur Rails de code dans mon contrôleur d'application qui compresse et code pour une chaîne de caractères avant de les envoyer au navigateur via un @variable à un .html.erb fichier:
Voici la fonction Javascript, qui utilise pako.min.js:
Voici un appel javascript pour que les décompresser de la fonction, ce qui veut unencode et décompresser des données stockées à l'intérieur d'un cachée du champ HTML:
Voici l'entrée dans les Rails application.js fichier pour appeler pako.min.js, qui est dans le /vendor/assets/scripts javascript répertoire:
Et j'ai eu le pako.min.js fichier à partir d'ici:
https://github.com/nodeca/pako/tree/master/dist
Tous les travaux sur ma fin, de toute façon! 🙂
OriginalL'auteur Andy Duncan