Символы Юникода в исходных файлах MATLAB

Я хотел бы использовать символы Юникода в комментариях в исходном файле MATLAB. Кажется, это работает, когда я пишу текст; однако, если я закрою файл и перезагрузлю его, "необычные" символы будут превращены в знаки вопроса. Я предполагаю, что MATLAB сохраняет файл как ASCII.

Есть ли способ сказать MATLAB использовать вместо UTF-8?

5 ответов

Решение

Как процесс MATLAB использует Locale Settings, показывает, как установить кодировку для разных платформ. использование

feature('DefaultCharacterSet')

Вы можете прочитать больше об этой недокументированной функции здесь. Смотрите также эту ветку Matlab Central для других опций.

Согласно http://www.mathworks.de/matlabcentral/newsreader/view_thread/238995

feature('DefaultCharacterSet', 'UTF8')

изменит кодировку на UTF-8. Вы можете поместить строку выше в вашем файле startup.m.

Представленное здесь решение работало для меня на Windows с R2018a.

В случае, если ссылка не работает: идея заключается в использовании файла matlabroot/bin/lcdata.xml настроить псевдоним для кодирования имени (некоторые пояснения можно найти в этом самом файле в комментариях):

<codeset>
  <encoding name="UTF-8">
   <encoding_alias name="windows-1252" />
  </encoding>
</codeset>

Вы бы использовали свое собственное значение вместо windows-1252текущую используемую кодировку можно получить, запустив feature('locale'),

Хотя, если вы используете символы Юникода в комментариях справки, браузер справки не распознает их, а также выводит окно консоли.

Только Mac OSX!

Как я нашел решение, которое сработало в моем случае, я хочу поделиться им.

Mathworks советует здесь использовать slCharacterEncoding(encoding) чтобы изменить кодировку по желанию, но для OSX это не решает проблему точно так же, как feature('DefaultCharacterSet') в принятом ответе не делает этого. Что помогло мне получить набор кодировки UTF-8 для открытия и сохранения файлов.m, так это следующая ссылка на ответы MATLAB: https://www.mathworks.com/matlabcentral/answers/12422-macosx-encoding-problem

Matlab, кажется, игнорирует любое значение, установленное в slCharacterEncoding(encoding) или же feature('DefaultCharacterSet') но использует регион, заданный в Системных настройках -> Язык и регион. После проверки того, какой регион выбран в нашем случае, можно определить фактическую кодировку в скрытом файле конфигурации в

 $matlabroot/bin/lcdata.xml

Этот каталог можно открыть, перейдя в "Приложения" и щелкнув правой кнопкой мыши на Matlab, выбрав "Показать содержимое пакета", как на скриншоте (здесь на немецком языке)

содержимое пакета

Например, для немецкого ISO-8859-1 по умолчанию его можно изменить, изменив соответствующую строку в файле lcdata.xml:

 <locale name="de_DE" encoding="ISO-8859-1" xpg_name="de_DE.ISO8859-1">

чтобы:

 <locale name="de_DE" encoding="UTF-8" xpg_name="de_DE.UTF-8">

Если выбранный регион отсутствует в файле lcdata.xml, это не будет работать.

Надеюсь это поможет!

Для пользователей Mac решение Jendker действительно помогает!!! Большое спасибо в первую очередь.

Не забудьте проверить язык по умолчанию в Matlab

getenv('LANG')

Затем перейдите к lcdata.xmlнайдите соответствующий xpg_nameи изменить encoding в UTF-8,

Теперь перезапустите Matlab, и все готово! Браво!

Другие вопросы по тегам