J'utilise un appel JAX à un script Perl qui renvoie le base64 pour un pdf, mais il me donne des problèmes dans IE. En fin de compte, je veux décoder les données base64 et créer un blob à utiliser pour PDFJS. Il fonctionne en chrome/firefox avec le code suivant:Pourquoi IE me donne-t-il des caractères chinois/mandarin lors du décodage de base64?
$.ajax({
url: '/path/to/my.cgi',
type: "POST",
data: opts,
async: false,
success: function(data){
var byteChars = atob(data);
var byteNumbers = new Array(byteChars.length);
for (var i = 0; i < byteChars.length; i++){
byteNumbers[i] = byteChars.charCodeAt(i);
}
var byteArray = new Uint8Array(byteNumbers);
var blob = new Blob([byteArray], {type: "application/pdf;base64" });
var url = URL.createObjectURL(blob);
}
});
Cependant, il ne fait jamais passé var byteChars = atob(data)
. J'étais sous l'impression que cela devrait fonctionner dans> IE10, mais je viens de passer à autre chose et j'ai décidé d'essayer le code de this question. Pour une raison quelconque, il décode le base64 avec des caractères chinois/mandarin. Voici les résultats de IE11 et de chrome, respectivement:
J'ai essayé scripts base64 d'autres endroits, comme this, mais les résultats sont toujours les mêmes dans IE. Cela ne permet pas à PDFJS de charger le blob correctement.
Si quelqu'un pouvait éclairer, je l'apprécierais. Voici mon dernier code que j'ai:
$.ajax({
...
success: function(data){
var userAgent = navigator.userAgent || navigator.vendor || window.opera;
var byteChars;
if(userAgent.indexOf("MSIE ") > 0 || !!navigator.userAgent.match(/Trident/)){
// You can use either link I provided for this Base64.decode()
byteChars = Base64.decode(data);
} else {
byteChars = atob(data);
}
var byteNumbers = new Array(byteChars.length);
for (var i = 0; i < byteChars.length; i++){
byteNumbers[i] = byteChars.charCodeAt(i);
}
var byteArray = new Uint8Array(byteNumbers);
var blob = new Blob([byteArray], {type: "application/pdf;base64" });
var url = URL.createObjectURL(blob);
}
});