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

Работа с различными кодировками (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 НЕ являются принципиальными. Они чисто технические и в первую очередь обусловлены отсутствием (на текущий момент) реальной неоходимости строить запсуки с переконвертацией