[tex-live] bug in TeX Live Utility

Manuel Pégourié-Gonnard mpg at elzevir.fr
Mon Jul 13 20:20:14 CEST 2009


Norbert Preining a écrit :
> On Sun, 12 Jul 2009, Karl Berry wrote:
>>     Commenting out
>>
>>     binmode(STDOUT, ":utf8");
>>
>>     in tlmgr.pl 'fixes' this problem, but I've no idea how it should be  
>>     solved correctly.
>>
>> Evidently that binmode is causing double encoding.  I don't remember why
>> it's there.
>>
I tend to think that the binmode here is not the cause. The cause it that Perl
somehow gets utf8 strings without properly marking them as utf8. If all utf8
strings are known to be utf8 by Perl, nothing will get
double-latin1-to-utf8-encoded.

> Honestly, if *ANYONE* here can make sense of all the :FOOBAR in perl
> and can explain me how I get:
> - guaranteed utf8 encoded files saved (saving tlpdb)
> - reading from tlpdb in the right encoding
> - output to stdout in the encoding that is the "correct" one
> - and probably some other cases I forgot
> then I would happily fix that, but AFAIR the binmode didn't come with
> some reason.
> 
I generaly use

use utf8;                 # script encoding
use open IO => ':utf8';   # default encoding for files we open later
binmode(STDIN, ":utf8");  # these 3 fh are allready opened with
binmode(STDOUT, ":utf8"); # a possibly wrong (tipically latin1) encoding
binmode(STDERR, ":utf8"); # so reset them to something deterministic

and have no encoding problem at all, as long as everything (the script itself,
stdin, sdtout, stderr, any files the script reads from or writes to) if utf-8.
If for some reason I want to read or write a file using, say latin1, I do

open my $fh, '<:encoding(iso-8859-1)', $filename;

(s/</>/ for writing obsiously).

The "use open IO => ':utf8';" line may not work with older perls or perls
compiled without PerlIO. In this case, it is necessary to explicitly say

open my $fh, '<:encoding(utf8)', $filename;

for each file containing non-ascii and encoded in utf-8 that we want to open.

Manuel.



More information about the tex-live mailing list