2016-04-08 62 views
5

創建了一個回購協議,加入UTF8和拉丁文2編碼的文件與此內容:Git:Diff不處理除UTF-8以外的字符編碼?

á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 <[email protected]> 
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 

我的git相同的輸出在Linux和Windows上(我的語言環境是Latin2)。無尋呼機(git --no-pager log -p 82904e60)試過了,沒有了逃生的代碼相同的結果:

commit 82904e6 
Author: BimbaLaszlo <[email protected]> 
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是怪異:

Same encoding with different output

+0

這需要git來識別編碼(如果沒有關於哪個文件被編碼的元數據,這是不可能的(這是不可能的),並且b)將編碼轉換爲顯示編碼,這是我不確定git應該參與的任務。 – deceze

回答

2

Git根本不關心字符編碼。一個文件只是一堆字節。

顯示由您的終端完成。如果它被配置爲以UTF-8解碼,則您的latin-2文件似乎已損壞。如果它被配置爲以latin-2解碼,那麼你的UTF-8文件似乎損壞了。

也許encoding屬性(見git help gitattributes)能夠給一些工具一個提示如何正確解碼文件,但我從來沒有使用過這個。 例如github可能足夠聰明地查看這個屬性並以不同的方式解碼這些文件。

+0

我認爲它與終端無關:請參閱問題的結尾。在我看來,'gitattributes'有點怪異:手動設置每個文件都是問題的溫牀。 – bimlas

+0

@Bimba它*是*您的終端!正如michas所說:如果您的終端正在等待latin2,那麼UTF-8數據就會出現故障,反之亦然。不同的終端給你不同的結果,這裏沒有什麼大的驚喜。 Git只輸出原始二進制數據,句點。它不會對編碼做任何事情。 – deceze

+0

@deceze:看到圖像 - 同一個文件在不同輸出的同一終端上? – bimlas