Я пытаюсь узнать, как использовать Matlab http интерфейс . И я надеюсь загрузить несколько .swf
файлов.
Кажется, Matlab может загрузить файл, если URL действителен, следуя примеру отправки HTTP-сообщения в документации для письмо. И я говорю, что, кажется, загрузка работает, потому что .ContentType
возвращает то, что ожидается.
>> resp.Body.ContentType
ans =
MediaType with properties:
Type: "application"
Subtype: "x-shockwave-flash"
Parameters: "["charset" "utf-8"]"
MediaInfo: "application/x-shockwave-flash; charset=utf-8"
Weight: []
Но как вы сохраняете данные в файл, когда данные не являются изображением или текстом? Я не могу найти никаких документов по этому вопросу. ( пример )
РЕДАКТИРОВАТЬ:
Моя попытка.
Я думаю, что применяется следующий отрывок из документации :
Если MATLAB не поддерживает тип или если для свойства HTTPOptions.ConvertResponse установлено значение false, то:
Если тип основан на символах , затем Data содержит полезную нагрузку, преобразованную в строку.
В противном случае Data содержит необработанный вектор uint8.
Итак, я собирался наивно пытаться вывести полезную нагрузку в текстовый файл и надеяться на лучшее. Сначала несколько вещей.
>> class(resp.Body.Data)
ans =
'string'
>> current = slCharacterEncoding()
current =
'windows-1252'
Я попытался записать данные в текстовый файл, не беспокоясь о потенциальных проблемах кодирования. Излишне говорить, что это не работает.
>> fid=fopen('out1.swf','wt');
>> fprintf(fid,'%s',resp.Body.Data);
>> fclose(fid);
Первая строка результирующего файла, когда читается в шестнадцатеричном коде, это
4357 5309 1a7e 0000 781a 1a1a 0938 1a1a
, в то время как правильный файл при загрузке Chrome и возможность отображения правильного содержимого напрямую:
4357 5309 a5bc 0000 78da 7cbb 0934 d46f
Изменение кодировки на utf-8 с использованием slCharacterEncoding
либо не работает в этом случае, либо кодировка все еще неверна. Первая строка вывода файла выглядит следующим образом.
>> slCharacterEncoding('UTF-8');
>> resp = send(r,uri);
>> fid=fopen('out1.swf','w+');
>> fprintf(fid,'%s',resp.Body.Data);
>> fclose(fid);
4357 5309 efbf bd7e 0000 78ef bfbd efbf
(Я знаю, что файлы не должны быть идентичными для правильного чтения. Я визуально проверил вывод. Я использую только первую строку, чтобы продемонстрировать несоответствие .)
Что пошло не так?