C-- Sphinx Compiler

...
  • А просто "строка в UTF-8", если файл закодирован в UTF-8? Ему не пофиг, что там внутри кавычек?
    Сделаем мир лучше!
  • Ему не пофиг, что там внутри кавычек?
    Не совсем. Но всё решаемо. По умолчанию gcc ожидает UTF-8. Если это не utf8 нужен ключ. Например для L"Привет мир" ключ -finput-charset=CP1251, если файл в Win кодировке для кириллицы.
    -fwide-exec-charset=charset установит во что будут перекодированы L"" строки.
  • А зачем вообще использовать L"...", если для UTF-8 речь идёт о просто "..."?
    Сделаем мир лучше!
  • Мне не нравится UTF-8 тем, что это кодировка с переменной длиной символа. Любая операция со строками сильно усложняется. Лучше сразу UTF-32.
  • CleverMouse wrote:А зачем вообще использовать L"...", если для UTF-8 речь идёт о просто "..."?
    А скомпилируется, если символы не влезают в char ?
    Я в этом сомневаюсь.
  • Консоль mingw64 под виндой: всё в UTF-8

    Code: Select all

    $ cat 1.c
    #include <stdio.h>
    
    int main()
    {
            static const char str[] = "Здравствуй, мир!";
            FILE* f = fopen("qq.txt", "wb");
            if (f) {
                    fwrite(str, sizeof(str), 1, f);
                    fclose(f);
            }
            return 0;
    }
    $ gcc 1.c && ./a
    $ cat qq.txt
    Здравствуй, мир!
    
    Все файлы - в UTF-8.
    Сделаем мир лучше!
  • А UTF-16 - кодировка с длиной символа, которая иногда переменная. Это ещё хуже.
    UTF-32 - вещь в принципе хорошая, но с ней мало кто умеет работать. Скопировать набор байт от одной кавычки до другой из исходника в бинарник могут более-менее все компиляторы, а вот перегонять туда-сюда - удовольствия мало.
    Сделаем мир лучше!
  • Проверил, получается так:
    обычная строка "" конвертируется в -fexec-charset=utf-8
    L"" строка в -fwide-exec-charset=utf-16
  • Я попробовала пересохранить вышеупомянутый 1.c в cp1251 и в cp866. gcc молча проглотил оба варианта, qq.txt соответственно оказался в cp1251 и в cp866.

    Code: Select all

    $ gcc --version
    gcc.exe (Rev2, Built by MSYS2 project) 6.2.0
    Copyright (C) 2016 Free Software Foundation, Inc.
    This is free software; see the source for copying conditions.  There is NO
    warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
    
    Сделаем мир лучше!
  • CleverMouse wrote:Я предлагаю считать, что для PE-приложений абсолютно всё в UTF-8 без всяких маркеров - вход/выход системных функций 2,4,70,что-у-нас-там-ещё-принимает-строки, argv[0], все библиотеки. Иначе откуда, скажем, box_lib может узнать, хочет приложение строку в cp866 или в utf-8? Делать флаги для всех-всех-всех библиотек - означает дикие метастазы legacy по всей системе.
    В бокс-либ есть битик для этого в цвете. Он передается функции 4 обычно без изменений.

    Конечно, расчеты ширины поплывут, но это можно обработать специально - все равно переделывать т.к.многие ширину не считают вообще.
    Я за 866 по умолчанию, или другой однобайтовой кодировки, которая в установлена в системе по умолчанию.

    Все поломать и переписать в UTF8 ради кого? Кому нужна эта универсальность ?

    Начинать по любому надо с поддержки конверсий ядром или системной библиотекой. А то в newlib своя трансляция, в файловых система своя, в функциях вывода на экран - хз, тоже отдельная?
    Кто сказал что они совпадают?
  • CleverMouse wrote:Я попробовала пересохранить вышеупомянутый 1.c в cp1251 и в cp866. gcc молча проглотил оба варианта, qq.txt соответственно оказался в cp1251 и в cp866.
    У меня не получалось
    error: converting to execution character set: Illegal byte sequence
    wprintf(L"%S",L"Hello World UTF-16! Привет мир\n");
  • Ещё раз, а L""-то зачем? Почему не обычный printf с UTF-8?
    Сделаем мир лучше!
  • CleverMouse wrote:Ещё раз, а L""-то зачем? Почему не обычный printf с UTF-8?
    Обычный printf UTF-8 не понимает. Здесь wprintf нужен.
  • Siemargl wrote: Все поломать и переписать в UTF8 ради кого? Кому нужна эта универсальность ?
    How about everybody who does not use CP866 or CP1251?
    "Any intelligent fool can make things bigger, more complex, and more violent. It takes a touch of genius -- and a lot of courage -- to move in the opposite direction." Albert Einstein
  • Who is online

    Users browsing this forum: No registered users and 3 guests