Я занимаюсь разработкой кроссплатформенного приложения C (стандарт C89), которое имеет дело с текстом UTF8. Все, что мне нужно, это базовые функции работы со строками, такие как substr
, first
, last
и т. Д.
Вопрос 1
Существует ли библиотека UTF8, в которой реализованы вышеуказанные функции? Я уже посмотрел в отделении интенсивной терапии, и он слишком велик для моего требования. Мне просто нужно поддерживать UTF8.
Я нашел декодер UTF8 здесь . Следующие прототипы функций взяты из этого кода.
void utf8_decode_init(char p[], int length);
int utf8_decode_next();
Функция инициализации принимает массив символов, но utf8_decode_next()
возвращает int
. Это почему? Как можно распечатать символы, которые эта функция возвращает, используя стандартные функции, такие как printf
? Функция имеет дело с символьными данными и как их можно присвоить целому числу?
Если вышеприведенный декодер не подходит для производственного кода, у вас есть рекомендации получше?
Вопрос 2
Я также запутался, читая статьи, в которых говорится, что для Unicode вам нужно использовать wchar_t
. Насколько я понимаю, это не требуется, поскольку обычные строки C могут содержать значения UTF8. Я убедился в этом, посмотрев исходный код SQLite и git. SQLite имеет следующий typedef.
typedef unsigned char u8
Правильно ли мое понимание? Также, почему unsigned char
требуется?