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. > > 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