2013-10-17 18 views
29

Tôi có một tệp có ký tự tiếng Thụy Điển trong đó (åäö) được mã hóa bằng UTF8.Làm cho git diff hiển thị các ký tự được mã hóa UTF8 đúng

Nếu tôi cat tệp hiển thị tốt, nhưng nếu tôi làm git diff, các ký tự đặc biệt sẽ được in, ví dụ: < F6>.

Ví dụ git diff đầu ra:

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

Những gì tôi muốn xem:

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

tôi tìm thấy một câu hỏi khác liên quan đến git và các vấn đề mã hóa: git, msysgit, accents, utf-8, the definitive answers Nó nói rằng tất cả những vấn đề cần được cố định trong git phiên bản 1.7.10. Tôi có phiên bản 1.8.1.2

Tôi có thể làm gì để làm cho git diff hiển thị đúng åäö?

+4

Bạn có chắc chắn tệp của mình là UTF-8 không? 'xF6' là mã ISO-8859-1 cho' ö', và 'xE5' là mã cho' å'. – matt

+1

'tệp -bi filename.txt' cung cấp cho tôi văn bản/đồng bằng; charset = utf-8 – Tobbe

+3

@Tobbe Tôi nghi ngờ 'file' đơn giản nhận thấy rằng nó không phải là ASCII, và không thực hiện bất kỳ thử nghiệm mở rộng nào để xác minh đó là tệp UTF-8 hợp lệ (nó sẽ không được nếu giá trị byte thực là 0xf6 và 0xe5 như matt cho thấy, bởi vì các byte ngay lập tức sau không có bộ 7 bit, mà sẽ được yêu cầu phải là điểm mã UTF-8 hợp lệ). 'file' có thể chỉ" đoán "tại UTF-8 - Tôi chắc chắn nó không lặp qua tất cả các mã hóa và kiểm tra sẵn có ... – twalberg

Trả lời

1

@matt và @twalberg là chính xác. Tệp thực sự không được mã hóa UTF-8. Cố gắng tìm ra điều này đã không giúp bởi thực tế rằng thiết bị đầu cuối của tôi (hterm) có thể không đầu vào AAO đúng cách (nhưng nó có thể hiển thị và sao chép/dán chúng) ...

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

giải quyết vấn đề của tôi

+1

Bạn thực sự có thể xem diff mà không cần ghi vào một tệp trung gian, mặc dù dòng lệnh có một chút chi tiết: 'git diff --color | iconv -f iso-8859-1 -t utf8 | less -r' trong đó '--color' buộc' git' tạo ra màu ascii thành đường ống và '-r' buộc' less' để truyền các màu thoát ra khỏi thiết bị đầu cuối. – SnakE

39

git đang bán hết các byte thô. Trong trường hợp này, nó không quan tâm mã hóa tệp của bạn là gì. Số được đánh dấu là <F6> bạn đang xem đến từ less, có lẽ được định cấu hình là PAGER của bạn. Thử cài đặt:

LESSCHARSET=UTF-8 
+6

Đây là câu trả lời đúng và phải là câu trả lời được chấp nhận. –

+3

Toàn bộ lệnh là 'xuất LESSCHARSET = utf-8' phải không? – tobias47n9e

+1

FYI, nếu bạn muốn thực hiện thay đổi vĩnh viễn (thay vì phải sử dụng lệnh 'xuất LESSCHARSET = utf-8' mỗi khi bạn đăng nhập vào máy của mình), chỉ cần thêm nó vào tệp '~/.bashrc' – DiegoDD

0

git log sẽ được mở bằng cách không vi phạm.

Vì vậy, bạn nên đặt ngôn ngữ thành ít hơn.

$ export LESSCHARSET=utf-8 && git log

Các vấn đề liên quan