Skip to content

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

Notifications You must be signed in to change notification settings

MrJetBOX/utf8_to_cp1251

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

10 Commits
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Библиотека на языке 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

Авторы

About

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

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • C 100.0%