创建了一个repo,添加了包含以下内容的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 --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来打印即使没有寻呼机也应该出现的字符?
修改
我认为问题与终端无关,例如在Windows PowerShell上 latin2.txt 没问题,但 utf8.txt 很奇怪:
答案 0 :(得分:3)
Git根本不关心角色编码。一个文件只是一堆字节。
显示由您的终端完成。如果将其配置为以UTF-8解码,则您的latin-2文件似乎已损坏。如果将其配置为解码为latin-2,则UTF-8文件似乎已损坏。
也许encoding
属性(请参阅git help gitattributes
)能够为某些工具提供如何正确解码文件的提示,但我从未使用过这个。
例如,github可能足够聪明,可以查看此属性并以不同方式解码这些文件。