in reply to Re: UTF8 error when using Net::SFTP::Foreign
in thread UTF8 error when using Net::SFTP::Foreign
Since it's possible the flag doesn't matter, the snippet you posted should probably be changed to the following, the fatal equivalent of "Wide character in print".
sub write { @_ == 3 or croak 'Usage: $sftp->write($fh, $data)'; my ($sftp, $rfh) = @_; $sftp->flush($rfh, 'in') or return undef; if (utf8::is_utf8($_[2])) { splice(@_, 2, 1, "$_[2]"); # Don't affect caller. utf8::downgrade($_[2], 1) # Change format to bytes. or carp("Can only write bytes to a socket"); } ...
Try finding out if the flag is on for a good reason
I don't see how that's relevant.
If the data is text, it doesn't matter if the flag is on or not when you encode the data as needed.
If the data isn't text, it doesn't matter if the flag is on or not. Just use utf8::downgrade.
use strict; use warnings; use Encode qw( encode ); my $enc = 'iso-latin-1'; # Desired encoding my $text = chr(130); # Any char supported by iso-latin-1 and $enc utf8::downgrade(my $text_off = $text); utf8::upgrade (my $text_on = $text); # Encode text on output my $from_off = encode($enc, $text); my $from_on = encode($enc, $text); print("bytes are ", ($from_off eq $from_on ? 'same' : 'diff'), "\n");
bytes are same
use strict; use warnings; utf8::downgrade( my $bytes_off = '' ); $bytes_off .= chr($_) for 0..255; utf8::upgrade( my $bytes_on = '' ); $bytes_on .= chr($_) for 0..255; # Downgrade variable on output to avoid false positive. utf8::downgrade( my $from_off = $bytes_off ); utf8::downgrade( my $from_on = $bytes_on ); print("bytes are ", ($from_off eq $from_on ? 'same' : 'diff'), "\n");
bytes are same
Update: Fleshed out some details. Changed to use $_[2] as in original snippet.
|
|---|
| Replies are listed 'Best First'. | |
|---|---|
|
Re^3: UTF8 error when using Net::SFTP::Foreign
by salva (Canon) on Feb 18, 2009 at 13:37 UTC | |
by ikegami (Patriarch) on Feb 18, 2009 at 14:21 UTC | |
|
Re^3: UTF8 error when using Net::SFTP::Foreign
by almut (Canon) on Feb 18, 2009 at 03:28 UTC | |
by ikegami (Patriarch) on Feb 18, 2009 at 03:59 UTC | |
by almut (Canon) on Feb 18, 2009 at 05:04 UTC | |
|
Re^3: UTF8 error when using Net::SFTP::Foreign
by deadpickle (Pilgrim) on Feb 18, 2009 at 03:13 UTC | |
by ikegami (Patriarch) on Feb 18, 2009 at 04:06 UTC |