[SDL] Unicode filenames
Ryan C. Gordon
icculus at icculus.org
Mon Mar 1 09:17:00 PST 2010
> I think modern Unix-like systems consider 8-bit character strings to be
> UTF-8 strings already. So just use fopen?
That's the convention, but it's not enforced, I think. A Linux
filesystem can have any byte in the filename except null characters and
'/' ... if you give it data that's not valid UTF-8, it'll still work.
...it'll probably confuse all sorts of software, but it'll "work".
I think Mac OS X explicitly says it wants UTF-8 when using the POSIX
APIs (they are not stored in UTF-8 in the filesystem, it just converts
for you). Non-POSIX APIs on the Mac want CFStrings or NSStrings or what
not, which handle unicode details behind the scenes (you can create
CFStrings from UTF-8 data).
Windows _never_ wants UTF-8. Since Windows 98, they've provided an API
to convert to/from UTF-8 (and full Unicode support in all NT-based
OSes), but they want UTF-16. If you try to pass UTF-8 bytes to the APIs
that take a char * instead of a WCHAR *, it thinks you're using the
current "codepage" and it will not work, ever. These have to be manually
converted (SDL does this internally for you).
SDL wants UTF-8 whenever it asks for filenames, and converts as
appropriate for the system.
More information about the SDL