FreeSource: БиблиотекаNATSPEC (Версия для печати)

Библиотека NATSPEC


Библиотека NATSPEC предназначена для сглаживания национальных особенностей при использовании программ, а точнее:

Обратите внимание, что данная программа не позволяет решать национальные и межэтнические конфликты.

Оглавление документа

Причины появления


Пользователь Linux, который действительно работает в этой системе, часто сталкивается с проблемами кодировок: как содержимого файлов, так названий файлов. Практически на каждом шагу встречаются случаи, когда пользователя заставляют указывать кодировку (названий) файлов, с которыми он имеет дело. Это происходит при


Более того, существует целое непаханное поле программ, где надо бы указывать кодировку, а нечем:

Зачастую эти проблемы не решены, или решены частным образом, или решены не совсем корректным патчем.

Становится понятно, что в системе должна быть возможность получить ответ на следующие вопросы:

При этом часто можно слышать мнение, что эти ответы в общем случае не имеют ответа, и принципиально иметь не могут,
а потому не надо и невозможно пытаться на них ответить.
По большому счёту ситуацию практически исправляет (если полностью забыть о совместимости) полный перевод
системы на кодировку UTF-8. К сожалению, даже при этом возникнет ряд проблем (см. Проблемы Перехода На UTF 8)

Но вопросы совместимости никто не отменял и в любом случае порядок взаимодействия как с другими операционными системами (Windows, DOS, MAC), так и с Unix-подобными операционными системами должен быть установлен и сформулирован. Особенно это важно для дистрибутива.

По (возможно, беглом) рассмотрении кода таких проектов как WINE, Linux kernel, gettext, Ly X, GLIBC, GLIB, mount, submount, cdrtools, zip, dia, beep, xmms были сформулированы требования и создана реализация библиотеки, которая позволяет получать ответы на вопросы о кодировках,
а также имеет ряд вспомогательных функций, востребованных во многих проектах.

Зачем она нужна


Существует множество программ, тесно работающие с кодировками, но по объективным обстоятельствам идущие своим путём в их поддержке.
Чего стоит только поддержка перекодирования, встроенная в mkisofs, и использующая nls, выдранный из ядра Linux неизвестно какой версии.

Данный проект создан для того, чтобы решать большинство вопросов, связанных с перекодированием, вне конкретной программы. Это повышает
переносимость, и позволяет не отвлекаться конкретному проекту на написание костылей для решения общесистемных проблем.

Библиотека не является серебряной пулей или панацеей, это всего лишь средство повысить переносимость данных между разными системами, и облегчить жизнь пользователей и программистов на текущем переходном этапе, когда всё прогрессивное человечество одной ногой перешло в UTF-8 (нет, эта аббревиатура не относится к НЛО или гробам).

Как она устроена


Библиотека LIBNATSPEC определяет такие важные понятия, как
(это работает корректно только при соответствии поддерживаемых локалей в LIBNATSPEC и GLIBC)

и предоставляет API для их использования, а также дополнительные функции, позволяющие:

Принципе построения: Вся получаемая информация по возможности зависит от локали пользователя, если она не определена, используется системная локаль.
Предложенная в natspec автоустановка кодировок монтирования выставляет автоопределённые значения по умолчанию. НИКТО НЕ ОТМЕНЯЛ возможность задать кодировку вручную. Просто умолчание становится не iso-8859–1, а то, которое положено по локали.

Базой для эвристики является таблица, получаемая примерно по следующему алгоритму: По списку локалей, установленных с glibc, имеющейся в локали информации об основной кодировке, а также программе, получающей информации о соответствии кодировок различных ОС из WINE,
формируется статический массив, который используется в библиотеке в дальнейшем для определения кодировки по локали и пр.

Библиотека написана на языке C с учётом максимально возможной переносимости. В настоящий момент для сборки требуется
glibc и libpopt. Тестирование на других системах не проводилось.
Имеются интерфесы для других языков:

Имеется консольная программа, позволяющая получать определённые в библиотеке параметры. Например
$ natspec -l – показать системную локаль
$ natspec -i – вывести всю доступную информацию
(просьба посмотреть и высказать свои замечания по качеству определения ситуации на вашей машине)

Для ALT Linux:
В системе имеется файл /etc/sysconfig/i18n, в котором, кроме всего прочего, задана системная локаль строчкой LANG=локаль. Например, у меня в системе указано в этом файле: LANG=ru_RU.KOI8-R

Где скачать и как ознакомиться


Библиотека доступна в свободном репозитории пакетов Сизиф
На следующих ресурсах всегда выложены последние версии библиотеки:

С любыми вопросами можно обращаться по адресу, указанному в файле README проекта.
Я буду рад помочь собрать эту библиотеку для вашего дистрибутива.

Как использовать


В каталоге examples проекта лежат исправленные файлы и образцы патчей, решающих проблему
с кодировками для ряда программ. Возможно в вашей системе эти патчи ещё не применены, или они не внесены
в основную ветвь разработки программы.

Подобные проекты


Существуют программы, которые можно применять дополнительно для обеспечения совместимости.

Пакет h2du


Предоставляет программу dos2unix, которая позволяет осуществлять преобразования концов строк из принятой в одной системе в другую.
Имеется возможность автоматического определения исходного формата.

iconv


Рекомендуемое средство для перекодирования файлов из одной кодировки в другую. Следует подчеркнуть, что при неуказании одной из кодировок она подразумевается равной кодировке локали.