X-Git-Url: http://wagnertech.de/gitweb/gitweb.cgi/mfinanz.git/blobdiff_plain/5367525b274785435844298fcf299cdd4d1ac2bd..cc042e07ef78786b758b22cee75509815e59ba5b:/SL/Locale.pm diff --git a/SL/Locale.pm b/SL/Locale.pm index 05f55ce46..28b13c696 100644 --- a/SL/Locale.pm +++ b/SL/Locale.pm @@ -36,11 +36,13 @@ package Locale; -use Text::Iconv; +use Encode; use List::Util qw(first); +use List::MoreUtils qw(any); use SL::LXDebug; use SL::Common; +use SL::Iconv; use SL::Inifile; use strict; @@ -88,12 +90,18 @@ sub _init { } my $db_charset = $main::dbcharset || Common::DEFAULT_CHARSET; + $self->{is_utf8} = (any { lc($::dbcharset || '') eq $_ } qw(utf8 utf-8 unicode)) ? 1 : 0; - $self->{iconv} = Text::Iconv->new($self->{charset}, $db_charset); - $self->{iconv_reverse} = Text::Iconv->new($db_charset, $self->{charset}); - $self->{iconv_english} = Text::Iconv->new('ASCII', $db_charset); - $self->{iconv_iso8859} = Text::Iconv->new('ISO-8859-15', $db_charset); - $self->{iconv_to_iso8859} = Text::Iconv->new($db_charset, 'ISO-8859-15'); + if ($self->{is_utf8}) { + binmode STDOUT, ":utf8"; + binmode STDERR, ":utf8"; + } + + $self->{iconv} = SL::Iconv->new($self->{charset}, $db_charset); + $self->{iconv_reverse} = SL::Iconv->new($db_charset, $self->{charset}); + $self->{iconv_english} = SL::Iconv->new('ASCII', $db_charset); + $self->{iconv_iso8859} = SL::Iconv->new('ISO-8859-15', $db_charset); + $self->{iconv_to_iso8859} = SL::Iconv->new($db_charset, 'ISO-8859-15'); $self->_read_special_chars_file($country); @@ -105,6 +113,12 @@ sub _init { (qw(Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec)); } +sub is_utf8 { + my $self = shift; + my $handle = shift; + return $self->{is_utf8} && (!$handle || $handle->is_utf8); +} + sub _handle_markup { my $self = shift; my $str = shift; @@ -406,4 +420,14 @@ sub remap_special_chars { return $self->quote_special_chars($dst_format, $self->quote_special_chars("${src_format}-reverse", shift)); } +sub with_raw_io { + my $self = shift; + my $fh = shift; + my $code = shift; + + binmode $fh, ":raw"; + $code->(); + binmode $fh, ":utf8" if $self->is_utf8; +} + 1;