Вопрос в том, как создать с ноля кодировку и установить её в систему, чтобы при создании текстового файла и при выборе кодировки, в которой этот файл будет представляться, в перечне присутствовала эта кодировка и отображала в тексте её знаки.
На самом деле тут четыре задачи:
- Создать саму кодировку
- Создать файл описания кодировки в соответствующем формате — это и есть кодовая страница
- Создать шрифт для этой кодировки — для отображения символов
- Локализация клавиатуры — размещение ваших символов на клавиатуре
В целом всё достаточно просто — надо только разобраться как оно всё работает. Третий и четвёртый пункты нужны если у вас свой или нестандартный алфавит. Всё нижеследующее — для винды, как оно делается в линуксе я не знаю, но скорее всего что-то похожее (можно начать
отсюда).
Создать саму кодировку достаточно просто: в общем случае просто нумеруете каждый символ и ваша кодировка готова. В ОС Windows традиционно существует два основных вида кодировок: одно-байтовые и двух-байтовые. Соответственно, до 256 символов в первом случае и до 65535 символов во втором. Системное API поддерживает два вида кодировок: с суффиксом "A" (ANSI) и "W" (wide, Unicode-16). Так же существуют и другие виды кодировок: в половину байта — т.е. 7 бит, размером в 4 байта — юникод-32, есть даже гибридные, в которых символы могут занимать как один байт, так и больше. Это сегодняшний международный стандарт: utf-8.
Теперь вам нужно сообщить системе, что есть такая кодировка. Деталей формата не знаю и как оно в целом работает тоже — просто быстро поглядел документацию. Так что тут вам предстоит самостоятельно выяснить все детали. Советую начать с
официальной документации. Файлы кодировок хранятся по следующему пути:
%windir%\System32\c_XXXX.nls. в формате nls и в виде списка в реестре по пути
HKLM\SYSTEM\CurrentControlSet\Control\Nls\CodePage. Возможно что-то ещё потребуется. Вот тут вроде как есть редактор для кодовых страниц со всеми инструкциями: h
ttp://www.barrcentral.com/Help/Beps — но судя по всему редактор там идёт вместе со всем пакетом данного софта, т.к. на странице загрузок его нет отдельно, только
весь пакет.
Для стандартного алфавита этого уже достаточно и должно всё работать. В теории, конечно же. Как будет на практике — тут надо выяснять, что надо сделать ещё и где настроить. Например, для консольных и оконных приложений оно может работать по-разному.
Для отображения символов какого-то нового алфавита вам потребуется шрифт. В целом шрифт создать очень просто: редакторов шрифтов полно. Шрифт по сути это список из двух пар: число и картинка символа. Есть два основных вид шрифтов: пиксельные и векторные. Пиксельные — это обычные картинки из стандартных пикселей для каждого размера символов. А вот векторные шрифты универсальны для всех размером: вместо пикселей математические функции, которые описывают линии символов.
И последний шаг для вашего алфавита: локализация/раскладка клавиатуры. Тут всё просто: для этого используется
Microsoft Keyboard Layout Creator. Инструкций в сети по нему тоже много — даже на хабре есть подробная инструкция с примерами. В целом там всё достаточно просто, но как в нём работать с новым алфавитом и кодировкой точно не скажу, т.к. я делал раскладку только для русского/английского и стандартных кодировок.
В реальном мире всё несколько сложнее и для настоящей работы со своей кодировкой этого всего этого будет, скорее всего, недостаточно, т.к. нужна ещё поддержка со стороны ПО, которое будет использовать данную кодировку. Особенно, если она нестандартная или надо сделать что-то большее, чем просто напечатать символ на экране. Так что если какое-то приложение рассчитано на работу со стандартными кодировками, то при попытке использовать вашу кодировку в лучшем случае можно будет увидеть просто кракозябры, а в худшем — приложение банально не будет работать или падать с ошибкой.