Dan Muey wrote:
Thank you Michael, I'll have a look at Juerd's page as it's the only thing I 
haven't yet :)

On Jul 29, 2010, at 6:17 PM, Michael Ludwig wrote:

Hi Dan,

[Silence “Wide character” warning globally one time]
Dan Muey schrieb am 29.07.2010 um 16:59 (-0500):
I've a situation where a large code base will be outputting "byte
strings" and "unicode strings" from a number of sources.
All lumped together? This will likely mean encoding issues.

I essentially need to do no warnings "utf8";
That's hiding the problem.

[ -- Problem: Unicode string gives warning -- ]
Sorry, but no, the warning is not the problem: it's an indication to
the user making him aware of the actual problem, which is printing wide
characters to a single-byte (narrow) output handle.

   perl -le 'print "Think before you code™ (bytes string)";print "Hello 
\x{201C}World\x{201D} (Unicode String)";'
 perl -CO -le 'print "Hello \x{201C}World\x{201D}";'

See: perldoc perlrun

You need the equivalent of -CO in your script:

 binmode STDOUT, ':utf8';

   perl -le 'binmode STDOUT, "utf8";print "Think before you code™ (bytes string)";print 
"Hello \x{201C}World\x{201D} (Unicode String)";'
You're mungling bytes and Unicode characters together. The result is, of
course, wrong. Pick either bytes or Unicode as your standard encoding.
Convert input accordingly.

Is there any super voo doo that can be done?
The best voodoo is understanding Perl's Unicode handling by reading
Juerd's pages [1], which have also been included in the docs of current
Perl versions; so read those as well; but don't read the old docs, they
do contain some documentation bugs.

I have been working on the Perl pods for Unicode, and there have been significant changes for 5.12 and 5.12.1, and even more on the current developer's blead.

If there are still inaccuracies, I would like to know about them.


You might also want to read the archives of this list to see how I
managed to make some progress in understanding thanks to the good
answers I got here.

[1] http://juerd.nl/perl
--
Michael Ludwig



Reply via email to