Skip to content
Библиотека на языке C для конвертации строк из кодировки UTF-8 в CP1251
Branch: master
Clone or download
Permalink
Type Name Latest commit message Commit time
Failed to load latest commit information.
README.md
bit.h Начало. Apr 2, 2017
test.c Добавил адрес проекта во все файлы. Apr 14, 2017
utf8_to_cp1251.c Добавил адрес проекта во все файлы. Apr 14, 2017
utf8_to_cp1251.h Добавил адрес проекта во все файлы. Apr 14, 2017

README.md

Библиотека на языке C для конвертации строк из кодировки UTF-8 в CP1251

Адрес проекта: 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 одним кодом. Это ограничение не преодолено по двум причинам:

  1. Экономия вычислительных ресурсов.
  2. Если символы замещаются, то они не нужны.

Тестирование

Библиотека подвергается двум тестам: с линеным (последовательным) и двоичным поисками. Тестрирование обязательно при внесении изменений в библиотеку и необязательно при обычном использовании. Для тестирования библиотеки нужно выполнить следующии команды.

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

Авторы

You can’t perform that action at this time.