2015-05-21 3 views
1

С Modelica 3.2 (released March 2010) разрешено использовать произвольные символы Юникода в комментариях, строках описания и/или аннотациях.
Но по какой-то причине у меня возникли проблемы с кодом, как в следующем:Проблемы с кодировкой Modelica

within ; 
model ENCO_testing "code for investigating Dymola encoding problems" 
    Real TempC "Temperature in °C"; 
    parameter Real someNumber "description string german üöäß"; 
    Integer greekInt=4 "description string greek αβδεηζμθ"; 
    // a comment with math symbols: °²³~µ 

equation 
    TempC = if greekInt > 3 then someNumber*5 else someNumber/3; 
end ENCO_testing; 

Чтобы воспроизвести мои проблемы попробуйте выполнить следующие UTF-8 в оба конца:

  • скопировать и вставить указанный текст в ваш любимый текстовый редактор
  • сохранить файл, используя UTF-8 (с или без BOM, или любой другой кодировки) и закрыть
  • снова открыт в редакторе, а затем в OpenModelica и Dymola (в таком порядке)
  • , если все еще хорошо выглядеть, нажмите кнопку Сохранить в Dymola (возможно удалить символ и повторно введите его)
  • открытый снова в любимом редакторе, OpenModelica и Dymola
  • по крайней мере, некоторые символы будут выглядеть иначе, где-то

Может ли кто-нибудь сказать мне, как сохранить этот файл так, чтобы он выглядел хорошо повсюду? Или я слишком много ожидаю? Что нужно исправить и где?

+0

На самом деле меня интересует только символ ° градуса °. Копия нарушившего кода здесь: https://gist.github.com/thorade/1aa56a886b003fc1e42c – matth

ответ

1

Тестирование UTF-8 в последней версии Dymola (Linux), похоже, что Dymola больше не изменяет кодировку по ISO-8859-1 (в мою память это использовалось, чтобы изменить это). Однако он выглядит не очень хорошо, так как он отображается так, как если бы текст UTF-8 был ISO.

Самый простой способ заставить его выглядеть ОК везде - это использовать вместо него объекты HTML. Это, кажется, не правильно отображаться в браузере результатов моделирования в OMEdit, но делает в Dymola:

Real TempC "<html>Temperature in &deg;C<html>"; 
1

Да это, безусловно, проблема с отсутствием поддержки UTF8 в Dymola (даже 2016 года). Так что делать? Для строк описания вы можете просто использовать html-объекты для обхода поддержки Dymola поддержки UTF8.

например,

Real TempC "<html>Temperature in &deg;C</html>"; 
parameter Real someNumber 
    "<html>description string german &uuml;&ouml;&auml;&szlig;</html>"; 

Не хорошо, но работает ;-)

PS: Ах, и жалуется на DS об этом давно назревшей особенности.

+0

Похож на @ sjoelund.se избили меня. –

+0

Dymola 2018, похоже, полностью поддерживает UTF-8, по крайней мере, приведенный выше пример работает без проблем. Кажется, Dymola по умолчанию использует UTF-8 с спецификацией, но также принимает UTF-8 без спецификации. – matth

1

В Dymola 2016 FD01 (буквально только что выпущенный) вы можете установить Advanced.PreferWritingLatin1=false;, чтобы избежать записи файлов iso-latin-1.

Для поддержки вы должны использовать http://www.3ds.com/support и/или связаться с вашим реселлером; адрес [email protected] был удален.

+0

Спасибо за разъяснения относительно адреса электронной почты. Установка последней версии Dymola будет первым, что я буду делать завтра. – matth

+0

Кажется, что это работает, спасибо, но флаг нужно установить вручную: если не установить вручную, Dymola все равно испортит вышеприведенный пример, потому что, вопреки примечаниям о выпуске, обнаружение символов не-латинского-1 не работают (или недостаточно надежны, просто попробуйте этот пример). На данный момент я просто добавлю флаг в один из сценариев запуска. – matth

+0

Dymola 2017 добавляет новый флаг 'Advanced.AlwaysWriteUTF8'. – matth

 Смежные вопросы

  • Нет связанных вопросов^_^