Библиотека NATSPEC предназначена для сглаживания национальных особенностей при использовании программ, а точнее:
Обратите внимание, что данная программа не позволяет решать национальные и межэтнические конфликты.
Просьба глянуть на перевод страницы на английский, это заготовка для страницы http://natspec.sourceforge.net
Пользователь Linux, который действительно работает в этой системе, часто сталкивается с проблемами кодировок: как содержимого файлов, так названий файлов. Практически на каждом шагу встречаются случаи, когда пользователя заставляют указывать кодировку (названий) файлов, с которыми он имеет дело. Это происходит при
Более того, существует целое непаханое поле программ, где надо бы указывать кодировку, а нечем:
Зачастую эти проблемы не решены, или решены частным образом (например, путём выбора при установке системы/программы), или решены не совсем корректным патчем.
Становится понятно, что в системе должна быть возможность получить ответ на следующие вопросы:
При этом часто можно слышать мнение, что вопросы эти в общем случае не имеют ответа, и принципиально иметь не могут, а потому не нужно и невозможно пытаться на них ответить.
По большому счёту ситуацию практически исправляет (если полностью забыть о совместимости) полный перевод системы на кодировку UTF-8. К сожалению, даже при этом возникнет ряд проблем (см. Проблемы Перехода На UTF 8)
Но вопросы совместимости никто не отменял и в любом случае порядок взаимодействия как с другими операционными системами (Windows, DOS, MAC), так и с Unix-подобными операционными системами должен быть установлен и сформулирован. Особенно это важно для дистрибутива.
При (возможно, беглом) рассмотрении кода таких проектов как WINE, Linux kernel, gettext, LyX, GLIBC, GLIB, mount, submount, cdrtools, zip, dia, beep, xmms были сформулированы требования и создана реализация библиотеки, которая позволяет получать ответы на вопросы о кодировках, а также имеет ряд вспомогательных функций, востребованных во многих проектах.
Существует множество программ, тесно работающие с кодировками, но по объективным обстоятельствам идущие своим путём в их поддержке. Чего стоит только поддержка перекодирования, встроенная в mkisofs, и использующая nls, выдранный из ядра Linux неизвестно какой версии.
Данный проект создан для того, чтобы решать большинство вопросов, связанных с перекодированием, вне конкретной программы. Это повышает переносимость, и позволяет не отвлекаться конкретному проекту на написание костылей для решения общесистемных проблем. Проект не является серебряной пулей или панацеей, это всего лишь средство повысить переносимость данных между разными системами, и облегчить жизнь пользователей и программистов на текущем переходном этапе, когда всё прогрессивное человечество одной ногой перешло в UTF-8 (нет, эта аббревиатура не относится к НЛО или гробам).
Централизация очень важна в данной ситуации. Множество программ копирует один и тот же (как дословный, так и аналогичный по функциональности) код, причём проблема редко когда решается в целом, обычно предлагаются частные решения. Использование библиотеки, в которой сосредоточено решение проблемы, позволит большому количеству проектов не отвлекаться на решение проблем взаимодействия, перекодировки.
Библиотека LIBNATSPEC определяет такие важные понятия, как
и предоставляет API для их использования, а также дополнительные функции, позволяющие:
Принцип построения: Вся получаемая из библиотеки информация по возможности зависит от текущей локали (current locale).
Предложенное в natspec автоматическое указание кодировок монтирования выставляет автоопределённые значения по умолчанию. НИКТО НЕ ОТМЕНЯЛ возможность задать кодировку вручную. Просто умолчание становится не то, которое вкомпилировано в ядро, или просто iso-8859–1, а то, которое положено по локали.
Базой для эвристики является таблица, получаемая примерно по следующему алгоритму: по списку локалей, установленных с glibc, имеющейся в локали информации об основной кодировке, используя программу, получающую информацию о соответствии кодировок различных ОС из WINE, формируется статический массив, который используется в данной библиотеке для определения кодировки по локали и пр.
Библиотека написана на языке C с учётом максимально возможной переносимости. В настоящий момент для сборки требуется glibc и libpopt (для консольной части).
Проводилось тестирование на различных операционных системах, в том числе на популярных ветвях GNU/Linux, FreeBSD, SunOS, OS X
Имеются интерфейсы для других языков:
Для использования в скриптах имеется консольная программа, позволяющая получать определённые библиотекой параметры. Например
(для полного списка см. natspec -h)
Вот пример вывода на системе Mandriva Linux:
Для определения системной локали используется обращение к файлу, в котором она хранится. Для redhat-based систем это /etc/sysconfig/i18n. Подробнее см. файл get_locale.c исходного текста.
Библиотека опубликована на sourceforge.net: http://sourceforge.net/projects/natspec
В собранном для ALT Linux виде библиотека доступна в свободном репозитории пакетов Сизиф, в backports для ALT Linux Master 2.4.
Также на следующих ресурсах всегда выложены последние версии библиотеки:
С любыми вопросами можно обращаться по адресу, указанному в файле README проекта. Мы будем рады помочь собрать эту библиотеку для вашего дистрибутива.
В каталоге examples проекта лежат исправленные файлы и образцы патчей, решающих проблему с кодировками для ряда программ. Возможно в вашей системе эти патчи ещё не применены, или они не внесены в основную ветвь разработки программы.
В natspec.h описана каждая функция. Если что-то непонятно или надо улучшить – пишите.