A couple of weeks ago or so, I asked about using OCaml file primitives
with the Camomile library for Unicode
on Windows.  I thought I'd update people on the list about my
resolution of these issues.

I decided to make the application UTF-8 throughout, so that the string
type always means UTF-8 -- OK, there
are a few exceptions to that rule.  The SQLite3 library already deals
with UTF-8 in a graceful way,   The same is
true for the C/C++ parsing library I'm using.  That leaves the OCaml
library procedures, like open_in and open_out,
which definitely don't handle Unicode filenames on Windows.

I took the OCaml sources and made modified versions of functions, like
file_exists, open_in, and so on,
that convert filenames from UTF-8 to UTF-16 and then used "wide"
versions of the underlying Win32
primitives.  In some cases, I had to convert UTF-16 back to UTF-8.
The Win32 functions MultiByteToWideChar
and WideCharToMultiByte handle those conversions nicely.  I link in
these new functions, named
file_exists_win32, open_in_win32, etc., and everything works a treat.

-- Paul

_______________________________________________
Caml-list mailing list. Subscription management:
http://yquem.inria.fr/cgi-bin/mailman/listinfo/caml-list
Archives: http://caml.inria.fr
Beginner's list: http://groups.yahoo.com/group/ocaml_beginners
Bug reports: http://caml.inria.fr/bin/caml-bugs

Reply via email to