> Windows DOES "support" surrogates -- it upgraded from UCS-2 (equivalent to UTF-16 constrained to the BMP) to UTF-16 a long time ago (Win7, I think).
No, that happened almost 10 years earlier, with Windows 2000.
Regardless, the support of it is not perfect, and that is especially true for IO. Having to deal with non-standard facilities is unfortunately unavoidable on Windows when it comes to true Unicode, so, as suggested by others, UTF-8 is a much better choice for Lua programs (or any programs for that mater), and only low-level routines should convert to/from UTF-16.