Работа с кодировками (character encoding) входного файла
========================================================

.. contents::
   :local:

.. toctree::
   :hidden:

Работа с различными кодировками (character encoding) входного файла в lcc
немного отличается от того, как это реализовано в gcc. В gcc для управления
процессом используются три опции:

* ``-finput-charset=<param>`` - по этой опции настраивается ВХодная кодировка
  (кодировка, в которой написан исходный текст). По умолчанию включен режим
  ``-finput-charset=UTF-8``
* ``-fexec-charset=<param>`` - по этой опции настраивается ВЫХодная кодировка,
  которая будет использоваться для **ordinary** символьных и строковых литералов
  (``'a'`` или ``"abc"``). Т.е. компилятор будет строить переконвертацию
  в случаях, если exec charset НЕ совпадает с input charset. По умолчанию включен
  режим ``-fexec-charset=UTF-8``
* ``-fwide-exec-charset=<param>`` - по этой опции настраивается ВЫХодная кодировка,
  которая будет использоваться для **wide** символьных и строковых литералов
  (``L'a'`` или ``L"abc"``). По умолчанию включен режим ``-fexec-charset=UTF-32``

В lcc используется упрощённая (по отношению к gcc) модель со следующими отличиями:

* Через опцию ``-finput-charset=<param>`` можно задать только три варианта
  ВХодной кодировки: ``KOI8-R``, ``UTF-8``, ``ASCII``
* Через опцию ``-fexec-charset=<param>`` можно задать только кодировку, совпадающую
  с input charset. Другими словами, lcc всегда работает в режиме без переконвертации
  **ordinary** символьных и строковых литералов из одной кодировки в другую.
  В качестве неочевидного побочного эффекта будет выдача ошибки при использовании
  одной только опции, например, ``-finput-charset=KOI8-R``, т.к. потребуется
  обязательное добавление опции ``-fexec-charset=KOI8-R``. Но так нужно для того,
  чтобы избежать путанницы. Если запустить gcc с одной только опцией ``-finput-charset=KOI8-R``,
  то, учитывая значения по умолчанию, такой запуск будет эквивалентен запуску
  с опциями ``-finput-charset=KOI8-R -fexec-charset=UTF-8``, т.е. запуску
  с переконвертацией, который в lcc не поддержан. Поэтому для соблюдения формальной
  корректности запуска в lcc потребуется подавать опции ``-finput-charset=KOI8-R -fexec-charset=KOI8-R``
* Через опцию ``-fwide-exec-charset=<param>`` можно задать только параметр ``UTF-32``

В остальном поведение lcc совпадает с поведением gcc. Описанные выше
ограничения в lcc НЕ являются принципиальными. Они чисто технические
и в первую очередь обусловлены отсутствием (на текущий момент) реальной
неоходимости строить запсуки с переконвертацией

