Apparently, the Windows code still lives in 16-bit character string land.
test(escape, T == triple(a,b,literal('\U00012345'))) :- atom_triple('<a> <b> "\\U00012345" .', T).
As has already been reported in a different context:
Money quote: “Is there a special option or setting to make it work?” - “Insert a Linux USB stick into your computer.”
But seriously, @jan, what kind of work needs to be done and how much time will it take? I’d be willing to try (!) the first option, “…to abandon Windows wchar_t, replace all wcs routines with our own that use USC-4 and support UTF-16 I/O conversion.” Of course, I need a gentle introduction into the problem. Moreover, can the problem be cut in pieces of reasonable size, or is it necessary to change everything until swipl-win is working again?