Сохранение фигуры с помощью saveas, когда имя файла содержит символ Unicode - PullRequest
0 голосов
/ 07 января 2020

Резюме: Я хотел бы сохранить фигуру с именем файла, например σ=0.25.fig, но сохранение не удалось.

Разработка: Я работаю с R2019b Обновление 3 (на Win10), и я не могу изменить свою конфигурацию MATLAB, чтобы разрешить сохранение .m файлов с символами Юникода в них (т.е. feature('DefaultCharacterSet') застрял на 'US-ASCII'), я вынужден использовать sprintf для хранить различные не-ASCII символы в моих исходных файлах. Обычно это работает хорошо, но, очевидно, это вызывает проблемы при попытке использовать saveas.

Пример : рассмотрим следующий код,

hF = figure();
saveas( hF, sprintf('\x03C3=%4.2f.fig', 0.25) ) % sprintf correctly resolves to "σ=0.25.fig"

, который (на моем система?) приводит к следующей ошибке:

Error using save
Unable to write to MAT-file σ=0.25.fig.
The file may be corrupt.
Error in matlab.graphics.internal.figfile.FigFile/write (line 32)
save(obj.Path, obj.MatVersion, '-struct', 'SaveVars');
Error in savefig (line 83)
FF.write();
Error in saveasfig (line 6)
savefig(h, name);
Error in saveas (line 153)
    feval( ['saveas' format], h, name ) 

Вопрос: В свете вышеприведенной ошибки, как можно сохранить рисунок с нужным именем файла?

1 Ответ

1 голос
/ 07 января 2020

К счастью, функция movefile, которая используется для перемещения или переименования файлов, не страдает от той же проблемы с путями Unicode. Таким образом, все, что нам нужно, это разделить сохранение на два шага, где изначально используется временный путь / имя (состоящее из символов, которые saveas «любит»), после чего следует переместить / переименовать желаемое имя / путь:

saveas(hF, 'tmp.fig');
movefile('tmp.fig', fullfile(pwd, sprintf('\x03C3=%4.2f.fig', 0.25)));

... с получением желаемого результата,

enter image description here

...