2013-10-17 11 views
29

Ich habe eine Datei mit schwedischen Zeichen darin (åäö) mit UTF8 codiert.Machen Sie git diff UTF8 codierte Zeichen richtig anzeigen

Wenn ich cat die Datei zeigt es fein, aber wenn ich tun git diff werden die Sonderzeichen gedruckt, zum Beispiel als < F6>.

Beispiel git diff Ausgabe:

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

Was ich sehen wollte:

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

fand ich eine weitere Frage im Zusammenhang mit git und Codierung Probleme: in git git, msysgit, accents, utf-8, the definitive answers Es sagt, dass alle Probleme behoben werden sollen, Version 1.7.10. Ich habe Version 1.8.1.2

Was kann ich tun, um git diff richtig anzuzeigen åäö?

+4

Sind Sie sicher, dass Ihre Datei ist UTF-8? 'xF6' ist der ISO-8859-1-Code für' ö' und 'xE5' ist der Code für' å'. – matt

+1

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

+3

@Tobbe Ich vermute, dass 'file' einfach bemerkt, dass es kein ASCII ist, und keine umfangreichen Tests durchführt, um zu überprüfen, ob es sich um eine gültige UTF-8-Datei handelt (was nicht der Fall wäre, wenn die tatsächlichen Bytewerte 0xf6 sind und 0xe5 wie matt suggeriert, weil die unmittelbar folgenden Bytes kein gesetztes Bit 7 haben, was gültige UTF-8-Codepunkte sein müssten). 'Datei' kann bei UTF-8 einfach" raten "- Ich bin mir sicher, dass es nicht alle verfügbaren Codierungen durchläuft und testet ... – twalberg

Antwort

1

@matt und @twalberg waren korrekt. Die Datei wurde nicht UTF-8-codiert. Der Versuch, diese herauszufinden, wurde nicht durch die Tatsache, dass mein Anschluss (HTerm) nicht eingegeben AAO richtig (aber es anzuzeigen und zu kopieren kann/fügen Sie sie) ...

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

löste mein Problem

+1

Sie können das Diff tatsächlich anzeigen, ohne in eine Zwischendatei zu schreiben, obwohl die Befehlszeile etwas ausführlich ist: 'git diff --color | iconv -f iso-8859-1 -t utf8 | kleiner -r, wobei "--color" 'git' zwingt, ASCII-Farbe in das Rohr auszugeben und' -r' "weniger", um diese Farb-Escapes zum Terminal zu streamen. – SnakE

39

git ist Raw-Bytes ausgeben. In diesem Fall ist es egal, wie die Datei codiert ist. Die hervorgehobene <F6>, die Sie sehen, kommt von less, die vermutlich als Ihre PAGER konfiguriert ist. Versuchen Sie die Einstellung:

LESSCHARSET=UTF-8 
+6

Dies ist die richtige Antwort und sollte die akzeptierte sein. –

+3

Der ganze Befehl ist 'export LESSCHARSET = utf-8', nicht wahr? – tobias47n9e

+1

FYI, wenn Sie die Änderung dauerhaft machen wollen (anstatt den Befehl 'export LESSCHARSET = utf-8' bei jedem Einloggen in Ihren Rechner zu verwenden), fügen Sie ihn einfach Ihrer' ~/.bashrc' Datei hinzu – DiegoDD

0

git log wird von weniger nicht vi geöffnet werden.

Also sollten Sie lang auf weniger setzen.

$ export LESSCHARSET=utf-8 && git log