Я использую JAX-вызов для Perl-скрипта, который возвращает base64 для pdf, но это создает проблемы в IE. В конечном итоге я хочу декодировать данные base64 и создать blob для использования в PDFJS. Он работает в хром/Firefox со следующим кодом:Почему IE дает мне китайские/мандаринские символы при декодировании 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);
}
});
Однако, он никогда не получает мимо var byteChars = atob(data)
. У меня создалось впечатление, что он должен работать в> IE10, но я просто перешел и решил попробовать код от this question. По какой-то причине он расшифровывает base64 с некоторыми китайскими/мандаринскими символами. Ниже приведены результаты IE11 и хрома, соответственно:
я пробовал base64 скрипты из других мест, как this, но результаты всегда одинаковы в IE. Это не позволяет PDFJS правильно загружать blob.
Если кто-нибудь может пролить свет, я был бы признателен. Вот мой последний код, который у меня есть:
$.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);
}
});