У меня есть функция JS для асинхронной загрузки файлов:
function uploadFile(file)
{
var xhr = new XMLHttpRequest();
xhr.upload.addEventListener("progress", handleProgress);
xhr.addEventListener("load", handleComplete);
xhr.addEventListener("error", handleError);
xhr.open("POST", options.url + "?" + [options.queryFields].join("&"));
var formdata = new FormData();
formdata.append(options.uploadCallback, file);
xhr.send(formdata);
}
И, кажется, работает просто отлично. Пока я не загружаю файл, имя которого включает немецкие умлауты.
Запрос XHR (или, скорее всего, мой код) кодирует Umlauts по-разному в разных операционных системах:
На Mac с Firefox 61 буква «ü» кодируется как 117, 204, 136, что означает «u» и символ UTF-8 «Комбинированная диараезия».
В Windows 7 x64 и Firefox 61 он закодирован правильно: 195, 188
Я загружаю один и тот же файл с обеих машин. Я проверил различия в сетевой консоли Firefox и на стороне сервера. Струны отличаются от двух браузеров / машин.
Что мне делать, если я хочу, чтобы обе платформы / браузеры правильно отправляли имя файла в сообщении Multipart?
Я знаю, что есть возможность передать другое имя файла в качестве третьего параметра в formdata.append (), но ни encodeURI, ни encodeURICOmponent не являются правильным способом сделать имя файла с Umlauts "транспортабельным"