Commenter Chris Becke asks how the common controls convert ANSI parameters to Unicode, since the common controls are Unicode internally.

Everything goes through CP_ACP, pretty much by definition. The ANSI code page is CP_ACP. That's what ACP stands for, after all.

Now, there are some function families that do not use ANSI. The console subsystem, for example, prefers the OEM character set for its 8-bit strings, and file system functions can go either way, based on the setting controlled by the SetFileAPIsToANSI and SetFileAPIsToOEM functions.

In the scenario Chris describes, I suspect that the problem is not the ANSI-to-Unicode conversion but rather that the font selected into the listview didn't support the necessary characters.