Обработка специальных символов в C (кодировка UTF-8)

Необходимо выбрать первую опцию. Первая опция на самом деле сказала бы, "Устанавливают Ubuntu вместе с Microsoft Windows 7", но похоже, что у Вас есть несколько Операционных систем, установленных там. Выберите первый, и оттуда на Вас может выбрать размер для пространства раздела для Ubuntu.

Также все опции могут установить Ubuntu для автоматической установки загрузчика, как Вы упоминаете, но для Вашего самым легким был бы, снова, первый.

Из ссылки Вы обеспечили, можно установить Ubuntu на тех логических 55 ГБ пространства, которое Вы оставили.

18
задан o01 3 September 2009 в 13:39
поделиться

4 ответа

Перво-наперво:

  1. Чтение в буфере
  2. Используйте libiconv или аналогичный для получения типа wchar_t из UTF-8 и используйте функции обработки широких символов, такие как wprintf ()
  3. Используйте функции широких символов в C! Большинство функций обработки файлов / вывода имеют вариант с расширенными символами

. Убедитесь, что ваш терминал может обрабатывать вывод UTF-8. Правильная установка языкового стандарта и управление данными языкового стандарта могут автоматизировать для вас много открытий и преобразований файлов ... в зависимости от того, что вы делаете.

Помните , что ширина кодовой точки или символа в UTF -8 - переменная. Это означает, что вы не можете просто перейти к байту и начать чтение, как с ASCII ... потому что вы можете попасть в середину кодовой точки. В некоторых случаях хорошие библиотеки могут это сделать.

Вот код (не мой), который демонстрирует использование чтения файлов UTF-8 и обработки широких символов в C.

#include <stdio.h>
#include <wchar.h>
int main()
{
    FILE *f = fopen("data.txt", "r, ccs=UTF-8");
    if (!f)
        return 1;

    for (wint_t c; (c = fgetwc(f)) != WEOF;)
        printf("%04X\n", c);

    fclose(f);
    return 0;
}

Ссылки

  1. libiconv
  2. Данные локали в C / GNU libc
  3. Некоторые удобная информация
  4. Еще один хороший Unicode / UTF-8 в ресурсе C
28
ответ дан 30 November 2019 в 07:33
поделиться

Не знаю, может ли это помочь, но если вы уверены, что кодировки терминала и входного файла совпадают, вы можете попробовать setlocale () :

#include <locale.h>
…
setlocale(LC_CTYPE, "");
2
ответ дан 30 November 2019 в 07:33
поделиться

Вероятно, ваш текстовый файл закодирован в ISO-8559-1, но ваш терминал - в UTF- 8. Несоответствие такого рода является стандартной проблемой при работе с побайтовым управлением текстом; другие программы на C (такие как стандартные команды 'cat' и 'more') будут делать то же самое, и обычно это не считается ошибкой или чем-то, что необходимо исправить.

Если вы хотите работать с Unicode Уровень символа вместо байтов - это нормально, но вам нужно будет использовать wchar в качестве типа символа вместо char во всей программе и предоставить пользователю переключатели, чтобы указать, какая на самом деле кодировка входящего файла. (Хотя иногда можно догадаться, это не очень надежно.)

2
ответ дан 30 November 2019 в 07:33
поделиться

Убедитесь, что вы случайно не сбросили байты; некоторые символы UTF-8 имеют длину более одного байта (это своего рода суть), и вам нужно сохранить их все.

Может быть полезно распечатать содержимое буфера в шестнадцатеричном формате, чтобы вы могли проверить, какие фактически считываются байты:

static void print_buffer(const char *buffer, size_t length)
{
  size_t i;

  for(i = 0; i < length; i++)
    printf("%02x ", (unsigned int) buffer[i]);
  putchar('\n');
}

Вы можете сделать это после загрузки очень короткого файла, содержащего всего несколько символов.

Также убедитесь, что в терминале установлена ​​правильная кодировка, чтобы он интерпретировал ваши символы как UTF-8.

3
ответ дан 30 November 2019 в 07:33
поделиться
Другие вопросы по тегам:

Похожие вопросы: