MATLAB Engine является интерфейсом C к MATLAB. Он предоставляет функцию engEvalString()
, которая принимает некоторый код MATLAB как строку C (char *
), оценивает его, а затем возвращает результат MATLAB как строку C снова.Получить MATLAB Engine для возврата unicode
Мне нужно иметь возможность передавать данные Юникода в MATLAB через engEvalString()
и извлекать выходные данные в виде unicode. Как я могу это сделать? Меня не интересует конкретная кодировка (UTF-8, UTF-16 и т. Д.), Любой будет делать. Я могу адаптировать свою программу.
Подробнее:
Чтобы дать конкретный пример, если я посылаю следующее жало, зашифрованное как, скажем, UTF-8,
s='Paul Erdős'
Я хотел бы получить обратно Следующий вывод, снова закодированы в UTF-8:
s =
Paul Erdős
Я надеялся добиться этого путем отправки feature('DefaultCharacterSet', 'UTF-8')
(reference), прежде чем делать что-либо еще, и это отлично работает при работе с MATLAB R2012b на OS X. Он также отлично работает с R2013a на Ubuntu Linux. Однако он не работает на R2013a на OS X. Вместо символа ő
в выводе engEvalString()
я получаю код символа 26, который должен означать «Я не знаю, как это представить». Однако, если я получаю содержимое переменной s
by other means, я вижу, что MATLAB правильно сохраняет символ ő
в строке. Это означает, что только выход не работал, но MATLAB правильно интерпретировал вход UTF-8. Если я тестирую это на Windows с R2013a, ни вход, ни вывод не работают правильно. (Обратите внимание, что для Windows и реализации Mac/Linux по MATLAB Engine отличаются.)
Возникает вопрос: как я могу получить Юникода ввода/вывода работает на всех платформах (Win/Mac/Linux) с engEvalString()
? Мне нужно это для работы в R2013a, и желательно также в R2012b.
Если люди готовы экспериментировать, я могу предоставить некоторый тестовый код С. Я еще не размещаю это, потому что это большая работа, чтобы перегонять полезный небольшой пример из моего кода, который позволяет экспериментировать с разными кодировками.
UPDATE:
я узнал о художественном ('локали'), который возвращает некоторые региональные данные, связанные с. В Linux, где все работает правильно, все кодировки, которые он возвращает, - UTF-8. Но не на OS X/Windows. Есть ли способ установить различные кодировки, возвращаемые функцией ('locale')?
UPDATE 2:
Вот небольшой тест: download. Почтовый файл содержит программу MATLAB Engine C, которая считывает файл, передает его на engEvalString()
, а затем записывает вывод в другой файл.Там в пример файла включен со следующим содержанием:
feature('DefaultCharacterSet', 'UTF-8')
feature('DefaultCharacterSet')
s='中'
The (последняя часть) продукции я ожидаю
>>
s =
中
Это то, что я получаю с R2012b на OS X. Однако, R2013 на OS X дает мне код символа 26 вместо символа 中
. Выходы, создаваемые R2012b и R2013a, включены в zip-файл.
Как получить ожидаемый результат с R2013a на всех трех платформах (Windows, OS X, Linux)?
[Перекресток размещен на MATLAB Answers] (http://www.mathworks.com/matlabcentral/answers/69316-get-matlab-engine-engevalstring-to-take-return-unicode) – Szabolcs