Beefy Boxes and Bandwidth Generously Provided by pair Networks
XP is just a number
 
PerlMonks  

Re^2: "ISO-8859-1 0x80-0xFF" and chr()

by remiah (Hermit)
on Mar 24, 2012 at 03:07 UTC ( #961347=note: print w/ replies, xml ) Need Help??


in reply to Re: "ISO-8859-1 0x80-0xFF" and chr()
in thread "ISO-8859-1 0x80-0xFF" and chr()

Thanks for reply.

Problematic string came from chr(). I didn't know I can paste '' at PerlMonk, I tried to create it with chr(hex()). And I stumbled.

The OP of this thread Bug in Template? said he decode with database driver and print it in Template with like this.

my $t =Template->new(); $t->process("his.tmpl", {lines=>\@vars}, "output.html" ) or die $t->error();
Template wants encoded bytes, not decoded characters. This prints "#�#".
#!/usr/bin/perl use strict; use warnings; use Encode qw(decode encode); use Template; my($a,$decoded); #input bytes to $a $a=`perl -CS -e "use utf8;print ''"`; #decode it to character $decoded=decode('UTF-8', $a); #this will print replacement character to test_out1.html my $t=Template->new(); $t->process("test.tmpl",{a=>$decoded},"test_out1.html");
And below is Template for that.
<html> <head> <meta HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=UTF-8" +> </head> <body> #[% a %]# </body> </html>
Encode $a to bytes will work.
#!/usr/bin/perl use strict; use warnings; use Encode qw(decode encode); use Template; my($a,$decoded,$encoded); #input bytes to $a $a=`perl -CS -e "use utf8;print ''"`; #decode it to character $decoded=decode('UTF-8', $a); $encoded=encode('UTF-8', $decoded); #this is good my $t=Template->new(); $t->process("test.tmpl",{a=>$encoded},"test_out2.html");
There seems huge confusion around Template Tool Kit's Encoding problem here in Japan. My conclusion so far: "pass encoded bytes to Template, not decoded character".


Comment on Re^2: "ISO-8859-1 0x80-0xFF" and chr()
Select or Download Code
Re^3: "ISO-8859-1 0x80-0xFF" and chr()
by Anonymous Monk on Mar 24, 2012 at 03:45 UTC
    Hmm
    $ perldoc template |grep -i utf8 -C2 Alternately, the "binmode" argument can specify a particular IO la +yer such as ":utf8". $tt->process($infile, $vars, $outfile, binmode => ':utf8') || die $tt->error(), "\n";

      oh! I changed my conclusion now...

      $t->process("test.tmpl",{a=>$decoded},"test_out4.html",binmode=>":encoding(UTF-8)");

Log In?
Username:
Password:

What's my password?
Create A New User
Node Status?
node history
Node Type: note [id://961347]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this? | Other CB clients
Other Users?
Others drinking their drinks and smoking their pipes about the Monastery: (7)
As of 2014-12-25 23:50 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    Is guessing a good strategy for surviving in the IT business?





    Results (163 votes), past polls