Hi.
I'm writing a new PerlOutputFilter, stream version.
I have written several working ones before, so I know the general scheme.
But in this latest filter, I have a problem with the data encoding, which I did not encounter previously. I did not find an answer in the on-line mod_perl documentation, which seems silent about any encoding of the data that one might read in a filter.
(I also tried the WWW, without any more success).

To read the response data coming from upstream, I use the standard $f->read(), 
as in

        while (my $sz = $f->read(my $buffer, BUFF_LEN)) {
..

and then I need to pass this data to another module for processing 
(Template::Toolkit).
To make a long story short, Template::Toolkit misinterprets the data I'm sending to it, because this data /is/ actually UTF-8, but apparently not marked so internally by the $f->read(). So TT2 re-encodes it, leading to double UTF-8 encoding.

My question is : can I - and how -, set the filehandle that corresponds to the $f->read(), to a UTF-8 layer ?
I have tried

line 155: binmode($f,'encoding:(UTF-8)');

and that triggers an error :
 Not a GLOB reference at (my filter) line 155.\n
)

Or do I need to read the data 'as is', and separately do an

 $decoded_buffer = decode('UTF-8', $buffer);

?

Note 1 : I can of course do the above decode(), but it seems more elegant to just insert the I/O layer.

Note 2 : I know that the pre-filter data is UTF-8 (or at least I choose to believe that it is), because I check $f->r->content_type(), which returns "text/html;charset=UTF-8". Also, the filter otherwise works as expected, and I get the expected output in the browser, except that e.g. "München" becomes "München".

Thanks in advance for any tips
André

Reply via email to