Surely it's the other way around? If it's the COM object that is actually doing the output, then the problem is that Perl is passing it UTF16 but it thinks it's receiving ASCII? Or perhaps Win32::OLE is translating to UTF16 before use, and the component isn't dealing with the character set correctly...