http://www.perlmonks.org?node_id=868432


in reply to Chicanery Needed to Handle Unicode Text on Microsoft Windows

He Googles for help

utf16le site:perlmonks.org
UTF-16 on WinXP written by Perl shows whitespaces.
crlf mess in unicode utf-16le

Can someone explain how this sequence of PerlIO layers works?

See PerlIO

Why must so many layers be used?

Because of the defaults, see PerlIO

Can these layers be specified using the open pragma? If so, how? If not, why not?

This should work

use open qw' IO :raw:perlio:encoding(UTF-16LE):crlf ';
but apparently open pragma is broken and doesn't accept the same things as binmode/open

And why has this ancient Perl bug still not been fixed in 5.12.2?

I'm not a perl5-porter so I'm not sure, but it doesn't look like a bug exactly, and nobodys come up with a better way, or reported a bug (that I could find).

It seems there's no way to generate a UTF-16 file in little-endian byte order directly. To generate such a file, you have to specify the UTF-16LE CES (which is wrong) and add the byte order mark explictly to make it UTF-16 instead of UTF-16LE.

maybe :encoding(UTF-16LE):via(File::BOM)