Hi,

On 21/10/14 08:44, David Hickman wrote:
I wondered if anyone had any experience of using the Perl Template Toolkit and UTF-8 encoded files? I appear to be facing a rather Strange issue with a UTF-8 encoded template file (although the only UTF-8 encoded characters in the file are the £ sign):

• If I don’t tell the template toolkit anything about the encoding of the template file then the resulting output from the template is correct and the £ signs are output in UTF-8 format


How are you generating output? Is this via tpage/ttree, or Perl? A test case should make it much easier to track down any encoding issues.

• If I specifically tell the template toolkit that the file is encoded in UTF-8 (either using the configuration parameters, a BOM on the template file, or both) then the £ signs in the template are converted to character code 163 (the ANSI equivalent). This breaks my intended output of the template as the character encoding reported to the browser in the response header is UTF-8 even though the file now contains characters that are not compatible with UTF-8.


The £ Unicode character is codepoint 163 - http://www.fileformat.info/info/unicode/char/a3/index.htm - so it sounds like you might be trying to write Unicode strings directly without going through UTF-8 encoding?

For what it's worth, tpage does the right thing:

$ echo '[% "test: " %] £' > test.tt2
$ tpage test.tt2
test:  £
$ tpage test.tt2 | od -t x1z
0000000 74 65 73 74 3a 20 20 c2 a3 0a                    >test: ...<

That 0xC2 0xA3 is the expected UTF-8 encoding. In Perl, I think you'd need the ENCODING parameter if TT2 is reading the template file:

#!/usr/bin/env perl
use strict;
use warnings;
use Template;

# default ->process target is STDOUT,
binmode STDOUT, ':encoding(UTF-8)';

my $tt = Template->new(ENCODING => 'UTF-8');
$tt->process('test.tt2', {}) or die $tt->error;

Maybe try writing the template output to a scalar, and see if it's a valid Unicode (not UTF-8) string? Data::Dumper should report \x{a3} as the character in this case.

cheers,

Tom

_______________________________________________
templates mailing list
templates@template-toolkit.org
http://mail.template-toolkit.org/mailman/listinfo/templates

Reply via email to