use SL::Common;
-use vars qw(%converters);
+my %converters;
use strict;
return $self;
}
-sub get_converter {
+sub _get_converter {
my ($from_charset, $to_charset) = @_;
my $index = join $SUBSCRIPT_SEPARATOR, $from_charset, $to_charset;
- $converters{$index} ||= SL::Iconv->new($from_charset, $to_charset);
+ $converters{$index} ||= Text::Iconv->new($from_charset, $to_charset) || die;
return $converters{$index};
}
my ($from_charset, $to_charset, $text) = @_;
- $from_charset ||= Common::DEFAULT_CHARSET;
- $to_charset ||= Common::DEFAULT_CHARSET;
+ $from_charset ||= 'UTF-8';
+ $to_charset ||= 'UTF-8';
- my $converter = get_converter($from_charset, $to_charset);
- return $converter->convert($text);
+ my $converter = _get_converter($from_charset, $to_charset);
+ $text = $converter->convert($text);
+ $text = decode("utf-8-strict", $text) if ($to_charset =~ m/^utf-?8$/i) && !Encode::is_utf8($text);
+
+ return $text;
}
sub _convert {
my $self = shift;
my $text = shift;
- $text = $self->{handle}->convert($text) if !$self->{to_is_utf8} || !Encode::is_utf8($text);
- $text = decode("utf-8-strict", $text) if $self->{to_is_utf8} && !Encode::is_utf8($text);
+ $text = convert($self->{from}, $self->{to}, $text) if !$self->{to_is_utf8} || !Encode::is_utf8($text);
+ $text = decode("utf-8-strict", $text) if $self->{to_is_utf8} && !Encode::is_utf8($text);
return $text;
}
$self->{to} = shift;
$self->{to} = 'UTF-8' if lc $self->{to} eq 'unicode';
$self->{to_is_utf8} = $self->{to} =~ m/^utf-?8$/i;
- $self->{handle} = Text::Iconv->new($self->{from}, $self->{to}) || die;
return $self;
}