Hi,

On Tue, 1 Oct 2002, 10:07 GMT+08 (04:07 local time) Autrijus Tang
wrote:

> On Wed, Sep 25, 2002 at 07:44:47PM +0200, Robert Allerstorfer wrote:
>>      my ($from, $to) = map { s/^utf8$/utf-8/i; lc($_) } ($_[1], $_[2]);
>> But this fails due to the attempt to change $_[1]. I fixed this by
>> replacing this line by
>> 
>>         my ($from, $to) = @_[1, 2];
>>         ($from, $to) = map {
>>                 s/^utf8$/utf-8/i;
>>                 s/^shiftjis$/shift_jis/i;
>>                 lc;
>>         } ($from, $to);

> Thanks for your input.  I decide to bundle the Alias.pm with Encode::compat 
> to fix this problem more cleanly.

cool, but this produces encoding names that may not be supported by
iconv that is called by the Iconv module on some platforms. For
example, if the Perl code is

Encode::from_to($text, "sjis", "utf8");

Encode::compat would send "sjis" to Encode::Alias that comes back
with "shiftjis". On Windows, this results in an error due to an
Unsupported conversion because Iconv.dll does not know "shiftjis", but
it does know "sjis". "sjis" did work fine on several platforms that I
have tested so far.

Similary, I have found some limitations on certain platforms:

                s/^utf8$/utf-8/i unless $^O eq "hpux";
                # at least Win32 requires UTF-8 to be called 'utf-8'
                # On HP-UX, the encoding name for UTF-8 must be exactly 'utf8' 
(lowercase)
                s/^utf-8$/UTF-8/i if $^O eq "solaris";
                # On SunOS, the encoding name for UTF-8 must be exactly 'UTF-8' 
(UPPERcase)

                s/^ucs-2$/ucs2/i if $^O eq "hpux";
                # On HP-UX, the encoding name for UCS-2 must be exactly 'ucs2' 
(lowercase)
                s/^ucs-2$/UCS-2/i if $^O eq "solaris";
                # On SunOS, the encoding name for UCS-2 must be exactly 'UCS-2' 
(UPPERcase)

                s/^shiftjis$/sjis/i;
                s/^sjis$/SJIS/i if $^O eq "solaris";
                # On SunOS, the encoding name for Shift_JIS must be exactly 'SJIS' 
(UPPERcase)
                lc unless $^O eq "solaris";

I used this code on Encode::compat 0.02 and will now have to fit it to
0.04. You have announced that you are planning to use Unicode::MapUTF8
instead of Text::Iconv in a future version. Will this add more
platform independency?

best,
rob.

Reply via email to