JS - Проблема с кодировкой при загрузке файла через FileReader

Win10, приложение SAPUI5, файл гружу FileUploader'ом, читаю FileReader'ом.

При загрузке файла напрямую через бэк в SAP систему проблемы нет, бинарник читается-сохраняется. Кодировку распознаёт как "Кириллица (Windows)".

Но стоит передать файл через фронт - кодировка не читается корректно и выдает что-то такое:

"‰PNG\r\n\n���\rIHDR��y��‚\b���㞌���sRGB�®Îé��&#

вместо

‰PNG


IHDRy‚гћЊsRGB®ОйgAMA±Џ ьa pHYs%%IR$ряҐIDATx^мэ{°G~п‹ъњё±ЏOЬч8NЬ?ьџнЯ=з:boЗѕц‰ЩЗыбсЭѕЦЊЗћ°·Џз8мЩcПЊ $ЃДKHЂДKи-ђIH0B/=<сђB !HЂ!Ѓђxї(oі;{eWяЄWw­Zµzхъ|ѓO,єкWYYYХY•ЯОМъµ’Ь/~с чйѕПMцм/эЭ[ї| І»Дћ}‡МuќВ@8Жf КPe(‡2”CКЎ еP†r(C9”ЎКPe(‡2”CКЎ еP¦·КЎ±ЙіїґгЅнuќђO

Более того, если скопировать эту строку (корректную) из payload'а и вставить в окно браузера, получатся такие кракозябры.

(Не могу загрузить скриншот. Символьная последовательность как выше, но часть символов заменена такими квадратами. ? ? ?)

Код:

              var reader = new FileReader();
              reader.onload = function (e) {
                var oMedia = e.currentTarget.result;
                // var vContent = e.currentTarget.result.replace("data:" + file.type + ";base64,", "");
                // var oMedia = vContent;
                // var oMedia = btoa(vContent);
              };
              // reader.readAsDataURL(file);
              // reader.readAsArrayBuffer(file);
              // reader.readAsBinaryString(file);
              // reader.readAsText(file, "windows-1251");
              reader.readAsText(file); 

Этот код выдаёт наиболее близкий к желаемому результат, почему-то не readAsArrayBuffer и не readAsBinaryString, а именно readAsText. Но всё равно часть символов распознать не может. Предполагаю, FileReader читает в UTF-8, а файл в Windows-1251 или подобной. Прямое указание кодировки не помогло, приходят другие кракозябры. Есть идеи, как это победить?


Ответы (0 шт):