2013-10-17 265 views
29

我有一個帶有UTF8編碼的瑞典字符的文件(åäö)。使git diff正確顯示UTF8編碼的字符

如果我cat該文件顯示正常,但如果我做git diff特殊字符被打印,例如,如< F6>。

git diff輸出:

-   name: 'Magler<F6>d, S<F6>der<E5>sen', 

我想看到什麼:

-   name: 'Magleröd, Söderåsen', 

我發現Git和相關的另一個問題編碼問題:git, msysgit, accents, utf-8, the definitive answers 它說,所有的問題應該是固定的混帳版本1.7.10。我有版本1.8.1.2

我該怎麼做才能讓git diff正常顯示åäö?

+4

你確定你的文件是UTF-8嗎? 'xF6'是'ö'的ISO-8859-1代碼,'xE5'是'å'的代碼。 – matt

+1

'file -bi filename.txt'給我 text/plain; charset = utf-8 – Tobbe

+3

@Tobbe我懷疑'file'只是注意到它不是ASCII,並沒有進行任何廣泛的測試來驗證這是一個有效的UTF-8文件(如果實際字節值是0xf6和0xe5一樣,因爲緊隨其後的字節沒有第7位的設置,這將被要求成爲有效的UTF-8編碼點)。 '文件'可能只是「猜測」在UTF-8 - 我敢肯定,它不是循環所有可用的編碼和測試... – twalberg

回答

1

@matt和@twalberg是正確的。該文件實際上不是UTF-8編碼。試圖弄清楚這一點是沒有幫助的事實,我的終端(hterm)不能輸入正確的AAO(但它可以顯示和複製/粘貼它們)...

iconv -f ISO-8859-1 -t UTF-8 in.txt > out_utf-8.txt 

解決了我的問題

+1

即使命令行有點冗長,也可以在不寫入中間文件的情況下查看diff:'git diff --color | iconv -f iso-8859-1 -t utf8 | less -r',其中'--color'強制'git'將ascii顏色輸出到管道中,'-r'強制'less'將這些顏色轉義流傳輸到終端。 – SnakE

39

git正在傾出原始字節。在這種情況下,它不關心你的文件的編碼是什麼。突出顯示的<F6>來自less,這大概是配置爲PAGER。嘗試設置:

LESSCHARSET=UTF-8 
+6

這是正確的答案,應該是公認的。 –

+3

整個命令是'export LESSCHARSET = utf-8'不是嗎? – tobias47n9e

+1

僅供參考,如果您想使更改永久(而不是每次登錄到您的機器都必須使用命令'export LESSCHARSET = utf-8'),只需將其添加到您的'〜/ .bashrc'文件中 – DiegoDD

0

git日誌將被打開,但不是vi。

所以你應該把lang設置得更少。

$ export LESSCHARSET=utf-8 && git log