Мой самый большой кошмар из всех, когда я начинаю поддерживать юникод (мне не нравится слово «преобразование в юникод»), это сторонние библиотеки, которые принимают char * для имен файлов, а затем направляют их в устаревшие API-интерфейсы Windows, такие как CreateFileA.
Очень трудно сделать так, чтобы они поддерживали Unicode, если у вас нет исходного кода библиотеки, а также, эта практика очень хороша в Linux, где универсально поддерживается UTF-8.
Моя команда должна была получить имя файла 8.3 для каждого файла перед подачей его в эти API.Он опирается на параметр реестра (по умолчанию включен), который не позволяет Windows использовать символы не-ascii в именах файлов 8.3 и в первую очередь поддерживает имена файлов 8.3.
Это не работает, если сломанная библиотека создает файл, потому что имя файла 8.3 не известно до создания.Мы должны были обмануть это, создав обертку, которая создаст файл, выделит имя файла 8.3 и затем передаст его в библиотеку.