Я использую MATLAB для программного создания документа Microsoft Word в Windows. В общем, это решение работает отлично, но у него возникают проблемы с текстом, отличным от ASCII. Например, возьмите этот код:
wordApplication = actxserver('Word.Application');
wordApplication.Visible = 1;
wordApplication.Documents.Add;
selection = wordApplication.Selection;
umbrella = char(9730);
disp(umbrella)
selection.TypeText(umbrella)
Окно Command отображает символ зонтика правильно, но символ в документе Word является символом "вопросительный знак в поле", отсутствующим символом символа. Я могу вырезать и вставить символ из окна команд в Word, так что символ действительно доступен в этом шрифте.
Метод TypeText должен принимать ASCII. Есть ресурсы о том, как устанавливать флаги Unicode для аналогичных операций с других языков, но я не знаю, как их перевести в синтаксис, который я имею в MATLAB.
Уточнение:. Мой случай использования отправляет неизвестную строку Unicode (массив char), а не только один символ. Было бы идеально, если бы вы могли отправить все сразу. Вот лучший пример кода:
% Define a string to send with a non-ASCII character.
umbrella = char(9730);
toSend = ['Have you seen my ' umbrella '?'];
disp(toSend)
% Open a new Word document.
wordApplication = actxserver('Word.Application');
wordApplication.Visible = 1;
wordApplication.Documents.Add;
% Send the text.
selection = wordApplication.Selection;
selection.TypeText(toSend)
Я надеялся, что могу просто установить кодировку самого документа, но это, похоже, не помогает:
wordApplication = actxserver('Word.Application');
wordApplication.Visible = 1;
wordApplication.Documents.Add;
disp(wordApplication.ActiveDocument.TextEncoding)
wordApplication.ActiveDocument.TextEncoding = 65001;
disp(wordApplication.ActiveDocument.TextEncoding)
selection = wordApplication.Selection;
toSend = sprintf('Have you seen my \23002?');
selection.TypeText(toSend)