# object object
# (check for 'print' method for 'w' mode)
# (check for 'getline' method for 'r' mode)
- my ( $filename, $mode ) = @_;
+
+ # An optional flag $character_encoding may be given.
+ # The current options are:
+ # 1. '' or 'none' -> the file will not use binary encoding
+ # 2. 'utf8' -> the file will be utf8 encoded
+ # 3. Any other string: use simple binmode
+ my ( $filename, $mode, $character_encoding ) = @_;
my $ref = ref($filename);
my $New;
# handle a reference
if ($ref) {
if ( $ref eq 'ARRAY' ) {
- $New = sub { Perl::Tidy::IOScalarArray->new(@_) };
+ $New = sub { Perl::Tidy::IOScalarArray->new( $filename, $mode ) };
}
elsif ( $ref eq 'SCALAR' ) {
- $New = sub { Perl::Tidy::IOScalar->new(@_) };
+ $New = sub { Perl::Tidy::IOScalar->new( $filename, $mode ) };
}
else {
$New = sub { $mode eq 'w' ? *STDOUT : *STDIN }
}
else {
- $New = sub { IO::File->new(@_) };
+ $New = sub { IO::File->new( $filename, $mode ) };
}
}
$fh = $New->( $filename, $mode )
or Warn("Couldn't open file:$filename in mode:$mode : $!\n");
+ if ( $fh && $character_encoding && $character_encoding ne 'none' ) {
+
+ if ( $character_encoding eq 'utf8' ) {
+ if ( ref($fh) eq 'IO::File' ) {
+ $fh->binmode(":raw:encoding(UTF-8)");
+ }
+ elsif ( $fh eq '-' ) {
+ binmode STDOUT, ":raw:encoding(UTF-8)";
+ }
+ }
+
+ # Patch for RT 122030
+ elsif ( ref($fh) eq 'IO::File' ) { $fh->binmode(); }
+
+ elsif ( $fh eq '-' ) { binmode STDOUT }
+ }
+
return $fh, ( $ref or $filename );
}
if ( !$fh_warnings ) {
my $warning_file = $self->{_warning_file};
( $fh_warnings, my $filename ) =
- Perl::Tidy::streamhandle( $warning_file, 'w' );
+ Perl::Tidy::streamhandle( $warning_file, 'w',
+ $rOpts->{'character-encoding'} );
$fh_warnings or Perl::Tidy::Die("couldn't open $filename $!\n");
Perl::Tidy::Warn("## Please see file $filename\n")
unless ref($warning_file);
if ($save_logfile) {
my $log_file = $self->{_log_file};
- my ( $fh, $filename ) = Perl::Tidy::streamhandle( $log_file, 'w' );
+ my ( $fh, $filename ) = Perl::Tidy::streamhandle( $log_file, 'w',
+ $rOpts->{'character-encoding'} );
if ($fh) {
my $routput_array = $self->{_output_array};
foreach ( @{$routput_array} ) { $fh->print($_) }
return;
}
1;
-