А как насчёт скрестить UTF-8 и Win32 API?

Пришла давеча в голову совсем неоригинальная мысль – а почему ещё никто не сделал надстройку над Win32 API, позволяющую использовать строки, закодированные в UTF-8? Ведь существует же масса причин, чтобы такая библиотека пользовалась бы спросом, особенно несколько лет назад – во время массовой миграции с 9x на NT.

  1. Такую библиотеку несложно написать. Базовая инфраструктура в виде ANSI и Unicode вариантов одних и тех же Win32 функций существует. C и C++ поддерживают многобайтные символы (MBCS), в том числе и UTF-8.

  2. Перекодирование из UTF-8 в UTF-16 и обратно может показаться затратным, однако, к примеру, Wow64 делает фактически то же самое, перекодируя 32-х битные параметры в 64-х битные при каждом системном вызове и никакой особенной деградации производительности не заметно.

  3. Опыт применения UTF-8 в Unix мире показывает, что большинство ANSI приложений может без особых проблем работать с UTF-8 строками. Конечно, есть и отличия, но они легко обходятся.

  4. Переделка большого ANSI приложения в Unicode вариант, работающий с двухбайтовыми строками, весьма сложная и затратная процедура, требующая времени и немалого опыта от разработчиков. Перевод приложения на UTF-8. по всей видимости, должен быть значительно проще.

Конечно же, есть случаи, когда переход на UTF-8 сам по себе ничего не даёт, однако в большинстве ситуаций это вполне оправдано. Так почему же никто таким не пользуется?

PS: Беглый поиск в Интернете дал ссылку только одну ссылку UTF-8 Cygwin. Однако не удалось найти ни одной реализации для чистого Windows окружения.

comments powered by Disqus