Git:Diff不处理除UTF-8以外的字符编码?

创build一个回购,添加UTF8和Latin2编码文件与此内容:

árvíztűrő tükörfúrógép ÁRVÍZTŰRŐ TÜKÖRFÚRÓGÉP 

见https://github.com/bimlas/git-test/commit/872370caf91f1faaf931c1228c797f3d10d6435d

git log -p 82904e60的输出是:

 commit 82904e60d1940c036c8190e2a41de6b423727a7c Author: BimbaLaszlo <bimbalaszlo@gmail.com> Date: Mon Jul 27 14:38:35 2015 +0200 initial commit diff --git a/fileencoding/latin2.txt b/fileencoding/latin2.txt new file mode 100644 index 0000000..7165bc9 --- /dev/null +++ b/fileencoding/latin2.txt @@ -0,0 +1,2 @@ +<E1>rv<ED>zt<FB>r<F5> t<FC>k<F6>rf<FA>r<F3>g<E9>p^M +<C1>RV<CD>ZT<DB>R<D5> T<DC>K<D6>RF<DA>R<D3>G<C9>P^M diff --git a/fileencoding/utf8.txt b/fileencoding/utf8.txt new file mode 100644 index 0000000..80e1878 --- /dev/null +++ b/fileencoding/utf8.txt @@ -0,0 +1,2 @@ +árvíztűrő tükörfúrógép^M +ÁRVÍZTŰRŐ TÜKÖRFÚRÓGÉP^M 

我已经在Linux和Windows(我的语言环境是Latin2)git相同的输出。 尝试没有寻呼机( git --no-pager log -p 82904e60 ),得到相同的结果没有转义码:

 commit 82904e6 Author: BimbaLaszlo <bimbalaszlo@gmail.com> Date: 2015-07-27 14:38:35 +0200 initial commit diff --git a/fileencoding/latin2.txt b/fileencoding/latin2.txt new file mode 100644 index 0000000..7165bc9 --- /dev/null +++ b/fileencoding/latin2.txt @@ -0,0 +1,2 @@ + rv zt r  t k rf r g p + RV ZT R  T K RF R G P diff --git a/fileencoding/utf8.txt b/fileencoding/utf8.txt new file mode 100644 index 0000000..80e1878 --- /dev/null +++ b/fileencoding/utf8.txt @@ -0,0 +1,2 @@ +árvíztűrő tükörfúrógép +ÁRVÍZTŰRŐ TÜKÖRFÚRÓGÉP 

latin2.txt的日志是相同的,所以这个问题不是由一个输出中混合不同编码的文件引起的。

我怎样才能设置Git打印字符,因为他们应该出现即使没有传呼?

编辑

我认为这个问题和terminal没有关系,例如在Windows PowerShell上, latin2.txt没问题 ,但是utf8.txt很奇怪:

相同的编码与不同的输出

Git根本不关心字符编码。 一个文件只是一堆字节。

显示由您的终端完成。 如果它被配置为以UTF-8解码,则您的latin-2文件似乎已损坏。 如果它被配置为解码为拉丁文-2,你的UTF-8文件似乎中断。

也许encoding属性(请参阅git help gitattributes )能够给一些工具提示如何正确解码文件,但我从来没有使用过这个。 例如,github可能足够聪明地查看这个属性并以不同的方式解码这些文件。