Subscribed unsubscribe Subscribe Subscribe

diff-highlightでマルチバイト文字の差分が化けてしまう

Git の diff を美しく表示するために必要なたった 1 つの設定 #git - 詩と創作・思索のひろば
のdiff-highlightがイイなーと思って、早速~/.gitconfig

[pager]
    log  = /usr/local/opt/git/share/git-core/contrib/diff-highlight/diff-highlight | less -R
    diff = /usr/local/opt/git/share/git-core/contrib/diff-highlight/diff-highlight | less -R
    show = /usr/local/opt/git/share/git-core/contrib/diff-highlight/diff-highlight | less -R

と書いて使ってみているのですが、

のようになってしまっていてマルチバイト文字の差分がハイライトされるときに化けてしまって困っています。
どうすればいいんだろう…。

追記

とりあえず手元では

diff --git a/diff-highlight b/diff-highlight
index c4404d4..e959903 100755
--- a/diff-highlight
+++ b/diff-highlight
@@ -2,6 +2,7 @@
 
 use warnings FATAL => 'all';
 use strict;
+use Encode qw(decode_utf8 encode_utf8);
 
 # Highlight by reversing foreground and background. You could do
 # other things like bold or underline if you prefer.
@@ -20,10 +21,10 @@ while (<>) {
 		$in_hunk = /^$COLOR*\@/;
 	}
 	elsif (/^$COLOR*-/) {
-		push @removed, $_;
+		push @removed, decode_utf8($_);
 	}
 	elsif (/^$COLOR*\+/) {
-		push @added, $_;
+		push @added, decode_utf8($_);
 	}
 	else {
 		show_hunk(\@removed, \@added);
@@ -74,10 +75,10 @@ sub show_hunk {
 	my @queue;
 	for (my $i = 0; $i < @$a; $i++) {
 		my ($rm, $add) = highlight_pair($a->[$i], $b->[$i]);
-		print $rm;
+		print encode_utf8($rm);
 		push @queue, $add;
 	}
-	print @queue;
+	print encode_utf8($_) for @queue;
 }
 
 sub highlight_pair {

て書きかえて使う。