lua-users home
lua-l archive

[Date Prev][Date Next][Thread Prev][Thread Next] [Date Index] [Thread Index]

>  With that said, what does fopen() under Windows do when given a UTF-8
> encoded filename?

It does not work (returning NULL), unless the filename is pure ASCII.
Windows uses UTF-16 throughout the kernel for all strings, including filenames.
For all C functions expecting const char* strings, like fopen, the
current locale is used to convert into wchar_t* wide strings.
And for some (stupid?) reason, it is impossible to set UTF-8 as the
current locale on Windows !
So to support full Unicode stings while keeping ASCII compatibility,
you have to hack a little.
First convert strings from UTF-8 to UTF-16, and then call the wide
string version of the function, in that case _wfopen.

This is why there would be a need for filesystem virtualization.
Instead of directly calling fopen, Lua should call a pointer to an
opening function.
The pointer default would of course be fopen, but could be an UTF-8
adapter function using _wfopen, or something else (imagine opening
from a ZIP file).