LINUX.ORG.RU

История изменений

Исправление gh0stwizard, (текущая версия) :

Это фича Data::Dumper, забей.

#!/usr/bin/perl -w

use strict;
use JSON::XS;
use Encode ();

my $file = $ARGV[0] || 'file.json';

open ( my $fh, "<:raw", $file )
  or die "open $file: $!";

my $text = do { local $/; <$fh> };

close $fh;

my $p5 = JSON::XS->new->decode( $text );

# p5 internal unicode
# no warnings about Wide characters
printf "%s = %s [p5]\n", $_, $p5->{ $_ } for keys %$p5;

my $unicode = JSON::XS->new->decode( &Encode::decode_utf8($text) );
            # the same as JSON::XS->new->utf8(1)->decode( $text );

{
  binmode STDOUT, ":utf8";
  printf "%s = %s [utf8]\n", $_, $unicode->{ $_ } for keys %$unicode;
}

{
  use utf8;
  use Data::Dumper;
  print Dumper { "тест" => "Dumper плохой" };
}

Как ни крути, а Data::Dumper не проведешь. Если Dumper начнет выводить текст как есть, то это уже не будет дампов (такие дела, спроси у разрабов на RT, пусть фичей сделают//вернут все взад).

Исходная версия gh0stwizard, :

Это фича Data::Dumper, забей.

#!/usr/bin/perl -w

use strict;
use JSON::XS;
use Encode ();

my $file = $ARGV[0] || 'file.json';

open ( my $fh, "<:raw", $file )
  or die "open $file: $!";

my $text = do { local $/; <$fh> };

close $fh;

my $p5 = JSON::XS->new->decode( $text );

# p5 internal unicode
# no warnings about Wide characters
printf "%s = %s [p5]\n", $_, $p5->{ $_ } for keys %$p5;

my $unicode = JSON::XS->new->decode( &Encode::decode_utf8($text) );
            # the same as JSON::XS->new->utf8(1)->decode( $text );

{
  binmode STDOUT, ":utf8";
  printf "%s = %s [utf8]\n", $_, $unicode->{ $_ } for keys %$unicode;
}

{
  use utf8;
  use Data::Dumper;
  print Dumper { "тест" => "Dumper плохой" };
}

Как ни крути, а Data::Dumper не проведешь.