Реализация UTF-8 совместимых C Стандартные библиотечные функции в Windows (Pre-Win10)C++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Реализация UTF-8 совместимых C Стандартные библиотечные функции в Windows (Pre-Win10)

Сообщение Anonymous »

В Windows по умолчанию стандартные функции библиотеки C (например, fopen , mkdir , scanf ) работают с использованием кодировки/вывода системы, которая вызывает проблемы при решении UTF-8, кодируемых путей или консоли ввода/вывода. Я ищу надежный и портативный метод для создания слоя совместимости, который позволяет этим стандартным функциям C принять и возвращать API (UTF-16) в UTF-8, в то же время используя широкомасштабные характеристики Windows (UTF-16)
, чтобы быть совместимым со старыми версиями Windows (например, Windows 7 /11). on < /strong>: < /p>
  • Кодовая страница Windows 10 UTF-8 ().
  • Приложение XML Manifests.
Специально, я пытаюсь понять функции и общие паттерны для эффективного обертывания или повторного применения Copen (Comply> Code > Codefen > Coden > Coden > Coden > Удалить , mkdir , chdir , scanf , fgets , printf , fprintf и т. Д.), Чтобы достичь этой совместимости UTF-8. /> [*] intercept/reply стандартные вызовы библиотеки C.

[*] Convert char* (UTF-8) строки WCHAR_T* (UTF-16) для вызовов Windows API. /> выполнить , основная операция Windows с широкомасштабной характеристикой (например, _wfopen , _wmkdir ).

[*] code*at ap at aptr_t* (utf-16). (UTF-8) для вызывающего абонента, где это применимо (например, getEnv , getCwd ).

[*] Управление памятью [/b] для этих конверсий безопасным и эффективным. Отсутствие комплексного охвата для всех соответствующих стандартных функций C, в первую очередь, C ++ (когда я предпочитаю C) или полагаюсь на современные функции Windows, которые мне нужны, чтобы избежать более широкой совместимости. Например:
  • boostorg/nowide : отлично подходит для потоков C ++ и некоторых файловых функций, но не имеет покрытия для многих стандартных библиотечных функций (например, Scanf ) и является главным образом C ++. /> alf-p-steinbach/wrapped-stdlib : кажется заброшенным и неполным.
  • Gnome/Glib : Lie UTF-8, но не полная упаковка для стандартной библиотеки c. /> neacsum/utf8 : ограничен в области, не охватывает все стандартные функции библиотеки. /> jflarvoire msvclibx : не поддерживает Mingw, и только подмножество функций. /> < /li>
    < /ul>
    Я также изучал фрагменты из более крупных проектов, которые часто обращаются к конкретным функциям, но требуют значительной очистки и не являются всеобъемлющими: < /p>

    Git mingw.c < /li>
    open-win32.c
  • wireshark-awdl file_util.c
My question is not asking for a list of libraries, but rather for an explanation of the effective implementation strategies for such a wrapper/compatibility layer in C (or C++) on Windows, addressing the points above.
, в частности, я ищу информацию о:

[*] Общие шаблоны для функционального интерфейса/подключения в C в Windows , что позволило бы заменить стандартные библиотечные вызовы без модификации исходного исходного кода. UTF-8 для UTF-16 и UTF-16 в UTF-8 преобразования , которые не зависят от CP_UTF8 .

Случаи по обработке краев , как ограничения длины пути на более старых версиях Windows в рамках этого слоя. Как конкретные функции как fopen (сопоставление с _wfopen и режим обработки строки) или Scanf / (дело с преобразованием ввода консоли) будет реализована в такой обертке. В поисках практических, проверенных методов или демонстративных фрагментов/шаблонов кода , которые иллюстрируют, как создать надежный уровень совместимости для наиболее часто пораженных функций ввода -вывода и файловой системы. Если есть известные проекты с открытым исходным кодом (не только фрагменты), что реализуют эти методы четким, автономным образом (они могут служить в качестве примеров стратегий реализации ), ссылаясь на них, чтобы проиллюстрировать точку зрения о конкретной технике.>

Подробнее здесь: https://stackoverflow.com/questions/796 ... -pre-win10
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»