Créer un blob ou un fichier à partir d'une chaîne binaire JavaScript modifie le nombre d'octets?

J'ai été jouer avec un peu de JS bibliothèques de cryptage (CryptoJS, SJCL) et découvert les problèmes liés à la Goutte/Fichier et Api JavaScript "chaînes binaires".

J'ai réalisé que le chiffrement n'est même pas vraiment pertinente, voici donc un très simplifié scénario. Il suffit de lire un fichier en utilisant readAsBinaryString et puis créer un Blob:

>>> reader.result
"GIF89a����ÿÿÿÿÿÿ!þCreated with GIMP�,�������D�;"
>>> reader.result.length
56
>>> typeof reader.result
"string"
>>> blob = new Blob([reader.result], {type: "image/gif"})
Blob { size=64, type="image/gif", constructor=function(), more...}

J'ai créé un JSFiddle qui au fond ne le ci-dessus: il se contente de lire n'importe quel fichier arbitraire, crée une goutte, et les sorties de la longueur vs taille:
http://jsfiddle.net/6L82t/1/

Il semble que, lors de la création de l'objet Blob de la "binaire (javascript) de la chaîne", quelque chose avec le codage de caractères se termine munging le résultat.

Si un fichier binaire est utilisé, vous verrez que la longueur de la Goutte et de l'original de la chaîne binaire sont identiques.

Si il ya quelque chose qui se passe lorsque vous essayez de créer un Blob/Fichier à partir d'un non-texte en clair Javascript chaîne, et j'ai besoin de tout ce qui est de ne pas se produire. Je pense qu'il peut avoir quelque chose à voir avec le fait que JS chaînes de caractères UTF-16?

Il y a (peut-être) sujet ici:
HTML5 Fichier API de lecture de texte et binaire

Ai-je besoin d'éventuellement prendre de la restitution des résultats (UTF-16) et "convertir" à l'UTF-8 avant de les mettre dans un Blob/Fichier?

De travailler avec quelqu'un en #html5 sur Freenode, nous avons déterminé que si vous lisez un ArrayBuffer directement, puis de créer le blob qui, en utilisant d'abord un Uint8Array, les octets de travail très bien. Vous pouvez voir un violon qui fait essentiellement que voici:
http://jsfiddle.net/GH7pS/4/

La question est, au moins dans mon scénario, je vais finir avec une chaîne binaire et souhaitez figurer hors de la façon de convertir directement que dans une Goutte de sorte que je peux ensuite utiliser html5 télécharger pour permettre à l'utilisateur de cliquer pour télécharger le blob directement.

Merci!

source d'informationauteur Erik Jacobs