If you thought JavaScript was a mess, here's what it takes to pass a file path to a Windows API in C++: 🧵
- Windows uses UTF-16, but most modern software uses UTF-8
- Converting UTF-8 to UTF-16 requires calling MultiByteToWideChar twice (once for size, second to convert)
- Alternatively you can set the process code page to UTF-8 and call the 'A' variant API directly, but only sometimes, and only with Windows 10 v1903+, and you might still have to change the system locale setting and reboot
(1/3)
Linux APIs are 8bit, instead of 16bit, however the filesystem encoding can be anything if the user wants.
In practice we all use UTF-8 but correct software has to encode to the correct one just in case.
There is also still a max path length, but it’s longer like 4096.