phobos/tango on win32: please drop ANSI "support"
Lionello Lunesu
lio at lunesu.remove.com
Wed Feb 14 22:57:27 PST 2007
Walter Bright wrote:
> Lionello Lunesu wrote:
>> Both Phobos and Tango pretend utf8 is valid for calling ANSI methods
>> from the Windows' API. Obviously, it's not. The correct way is to
>> convert the utf8 string to the code-page expected by the call, or
>> convert them to unicode.
>>
>> I'd like to suggest the latter. Let's drop the ANSI support for Win32
>> altogether. Unicode is supported since Windows 95 OSR-2 (if I'm not
>> mistaken) and converting utf8 to ANSI is more expensive than
>> converting it utf8 to utf16 (which is what Windows 2000 and up convert
>> to internally anyway). No more "bool UseWFuncs". And converting utf8
>> to utf16 using MultiByteToWideChar would also take care of the
>> 0-terminator.
>
> The "useWfuncs" only happens for Windows 9x (including Me). All Windows
> 9x systems are 8 bit internally, and even if you use the W interface,
> they are internally converted to 8 bits anyway.
Yes, they will be converted to "8 bits", but not to utf8. They will be
converted to whatever code-page the thread's currently using, which is
what's supposed to be done. That's my point: both Phobos and Tango pass
utf8 to ANSI (..A) versions of Windows' functions, which is not correct.
You should either convert the utf8 to the correct code-page for passing
to WhatEverA(..), or convert it to utf16 and pass it to WhatEverW(..).
The last one is much easier: a fixed, straightforward conversion (no
need to know about code-pages) that also happens to be efficient for
Windows 2000 and up.
As for UseWFuncs: I don't like it because the check is done at run-time.
It's allover the place, practically doubles all Win32 code, not to
mention the imports / obj-size. More importantly, for the reasons
mentioned above, I don't think it's necessary.
L.
More information about the Digitalmars-d
mailing list