Showing 2 changed files with 24 additions and 10 deletions
+6 -4
lib/Gitprep.pm
... ...
@@ -59,10 +59,12 @@ sub startup {
59 59
   $git->bin($git_bin);
60 60
   
61 61
   # Encoding suspects list for Git
62
-  my $encoding_suspects
63
-    = $conf->{basic}{encoding_suspects} ||= 'UTF-8';
64
-  $encoding_suspects = [split /,/, $encoding_suspects] unless ref $encoding_suspects eq 'ARRAY';
65
-  $git->encoding_suspects($encoding_suspects);
62
+  my $encoding_suspects_str = $conf->{basic}{encoding_suspects};
63
+  my @encoding_suspects;
64
+  if ($encoding_suspects_str) {
65
+    @encoding_suspects = split /,/, $encoding_suspects_str;
66
+  }
67
+  $git->encoding_suspects(\@encoding_suspects);
66 68
 
67 69
   # Repository Manager
68 70
   my $manager = Gitprep::Manager->new;
+18 -6
lib/Gitprep/Git.pm
... ...
@@ -1735,12 +1735,24 @@ sub _chop_str {
1735 1735
 
1736 1736
 sub _dec_guess {
1737 1737
   my ($self, $str) = @_;
1738
-
1739
-  my $enc = Encode::Guess->guess($str, @{$self->encoding_suspects});
1740
-  # fallback default encoding if multile guess result
1741
-  # http://perl-users.jp/articles/advent-calendar/2009/casual/10.html
1742
-  $enc = $self->default_encoding unless ref $enc;
1743
-
1738
+  
1739
+  my $encoding_suspects = $self->encoding_suspects;
1740
+  
1741
+  my $enc;
1742
+  if (@$encoding_suspects) {
1743
+    for my $encoding_suspect (@$encoding_suspects) {
1744
+      my $ret = Encode::Guess->guess($str, $encoding_suspect);
1745
+      if (ref $ret) {
1746
+        $enc = $encoding_suspect;
1747
+        last;
1748
+      }
1749
+    }
1750
+    $enc //= $self->default_encoding;
1751
+  }
1752
+  else {
1753
+    $enc = $self->default_encoding;
1754
+  }
1755
+  
1744 1756
   my $new_str;
1745 1757
   eval { $new_str = decode($enc, $str) };
1746 1758