Адрес проекта: https://github.com/bravikov/utf8_to_cp1251
- Поставляется в виде исходного кода.
- Написана на языке С89.
- Может быть использована в программах на языке C++.
- Может применяться в программах для микроконтроллеров.
- В библиотеке учтено, что символы Юникод кодируются в UTF-8 разным колличеством байт (от 1 до 6 включительно).
- Подмена символов.
Вам понадобятся 3 файла:
- bit.h
- utf8_to_cp1251.h
- utf8_to_cp1251.c
Включите utf8_to_cp1251.h в файле, где хотите применить билиотеку. Добавте utf8_to_cp1251.c в сборку своего проекта. Для конвертации используйте функцию
int convertUtf8ToCp1251(const char * utf8, char * cp1251)
Описание функции смотрие в файле utf8_to_cp1251.h.
Файл test.c не нужно добавлять в сборку, он используется только для тестирования библиотеки.
Библиотека позволяет пользователю назначить собственную таблицу перекодировки. Пользовательская перекодировка может применяться к символам CP1251 из диапазона от 0x80 до 0xBF включительно. Таблица должна быть отсортирована по возрастанию кодов Юникод. Помните, что код 0x98 CP1251 никак не задействован, и его можно переназначить в первую очередь.
Пример:
static const Cp1251 cp1251Table[] = {
{0x98, 0x03C6}, /* φ, GREEK SMALL LETTER PHI */
{0x80, 0x2211}, /* ∑, N-ARY SUMMATION */
{0x81, 0x25BA}, /* ►, BLACK RIGHT-POINTING POINTER */
};
setCustomCp1251Table(cp1251Table, sizeof(cp1251Table) / sizeof(Cp1251));
Ограничение: в строке UTF-8 нельзя использовать символы, которые были замещены. Так как замещенные и замещающие символы будут кодироваться в CP1251 одним кодом. Это ограничение не преодолено по двум причинам:
- Экономия вычислительных ресурсов.
- Если символы замещаются, то они не нужны.
Библиотека подвергается двум тестам: с линеным (последовательным) и двоичным поисками. Тестрирование обязательно при внесении изменений в библиотеку и необязательно при обычном использовании. Для тестирования библиотеки нужно выполнить следующии команды.
gcc --std=c89 -D UTF8_TO_CP1251_LINEAR_SEARCH -o test1 test.c utf8_to_cp1251.c; ./test1
gcc --std=c89 -o test2 test.c utf8_to_cp1251.c; ./test2
- Дмитрий Бравиков (dmitry@bravikov.pro).