@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 также предоставляет функции для нормализации текста, поиска, сравнения и многих других операций, что делает ее мощным инструментом для работы с текстовыми данными на различных языках.