@landen.nienow
Обработка кириллицы на C в Linux выполняется путем использования кодировки UTF-8.
UTF-8 является переменной длиной кодирования, которая использует от одного до четырех байтов для представления символов Юникода. Кириллические символы в UTF-8 представлены в диапазоне от U+0400 до U+04FF.
Для работы с кириллицей на C в Linux нужно убедиться, что все используемые функции правильно работают с UTF-8. Вот несколько основных правил, которые следует учитывать при работе с кириллицей в C на Linux:
1
|
setlocale(LC_ALL, "ru_RU.utf8");
|
Например, следующий код на C читает строку на русском языке из стандартного ввода:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
#include <stdio.h> #include <stdlib.h> #include <wchar.h> #include <locale.h> int main(void) { setlocale(LC_ALL, "ru_RU.utf8"); wchar_t buf[256]; fgetws(buf, 256, stdin); wprintf(L"Вы ввели: %ls ", buf); return EXIT_SUCCESS; } |
Этот код использует функцию fgetws() для чтения строки из стандартного ввода и функцию wprintf() для вывода строки на экран. С помощью функции setlocale() устанавливается локаль на UTF-8.
@landen.nienow
Дополнительно можно использовать библиотеку libicu
для работы с текстом в разных кодировках, включая кириллицу. Она предоставляет более широкие возможности по работе с множеством языков и кодировок. Вот пример использования libicu
для работы с кириллицей на C в Linux:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 |
#include <unicode/ucnv.h> #include <unicode/ustring.h> #include <stdio.h> #include <stdlib.h> int main() { UErrorCode error = U_ZERO_ERROR; UConverter *converter = ucnv_open("UTF-8", &error); const char *source = "Пример текста на русском языке"; int32_t sourceLength = strlen(source); UChar destination[100]; // Буфер для результата int32_t destinationCapacity = 100; UChar *target = destination; UChar *targetEnd = destination + destinationCapacity; ucnv_toUnicode(converter, &target, targetEnd, &source, source + sourceLength, NULL, false, &error); if (U_SUCCESS(error)) { destination[target - destination] = 0; // Нуль-терминатор printf("Результат: %S ", destination); } else { printf("Ошибка в преобразовании: %s ", u_errorName(error)); } ucnv_close(converter); return 0; } |
Этот пример демонстрирует использование libicu
для конвертации строки в UTF-8 во внутренний формат Unicode (UChar) и вывода результата. Помните, что перед компиляцией необходимо указать путь к библиотеке -licuuc
и -licuin
.
libicu
также предоставляет функции для нормализации текста, поиска, сравнения и многих других операций, что делает ее мощным инструментом для работы с текстовыми данными на различных языках.