Masalah encoding keluaran git log pada prompt perintah Windows 10

89

Masalah

Bagaimana cara membuat git logoutput perintah ditampilkan dengan benar pada command prompt windows?

Contoh

git urutan perintah yang mengarah ke masalah Seperti yang Anda lihat, saya dapat mengetik karakter diakritik dengan benar tetapi pada git logoutput entah bagaimana lolos. Menurut UTF-8tabel pengkodean , kode antara tanda kurung siku ( <dan >) dari output sesuai dengan git configparameter yang diketik sebelumnya .

Saya telah mencoba mengatur LESSCHARSETvariabel lingkungan menjadi utf-8seperti yang disarankan di salah satu jawaban untuk masalah serupa tetapi kemudian hasilnya kacau:

keluaran log git setelah menyetel LESSCHARSET = utf8

Saya tahu .git/configdikodekan dengan benar utf-8karena ditangani gitkseperti yang diharapkan.

Output gitk yang tepat

Berikut adalah localekeluaran perintah jika perlu

LANG=
LC_CTYPE="C.UTF-8"
LC_NUMERIC="C.UTF-8"
LC_TIME="C.UTF-8"
LC_COLLATE="C.UTF-8"
LC_MONETARY="C.UTF-8"
LC_MESSAGES="C.UTF-8"
LC_ALL=

EDIT:

Outputnya juga sama di git-bash murni :

masukkan deskripsi gambar di sini

jadi saya yakin masalahnya adalah shell independen dan berkaitan dengan Git atau konfigurasinya sendiri.

Marcin Kłopotek
sumber
2
Sudahkah Anda mencoba solusi dalam " Karakter Unicode di baris perintah Windows - bagaimana? "?
sampai
Ya, saya mencoba beberapa halaman kode termasuk 65001 (UTF-8) tanpa hasil apa pun. Tampaknya perintah chcp tidak berpengaruh pada bagaimana keluaran log git ditampilkan. Itu selalu ditampilkan dengan cara yang sama.
Marcin Kłopotek
1
Maaf jika pertanyaan itu terdengar bodoh, tetapi mengapa Anda menggunakan command prompt Windows sama sekali, bukan Git Bash? Lebih cocok menggunakan Git, jendelanya dapat
diubah ukurannya
Bukan @kriegaex bodoh, sebenarnya bagus. Saya menggunakan git-bash yang dibungkus dengan ConEmu untuk penggunaan sehari-hari. Hasilnya adalah i.imgur.com/hMKz9D3r.png yang sama . Saya telah menjelaskan masalah saya memberikan contoh dengan cmd.exe untuk tidak membingungkan orang dengan alat dependen lain yang saya gunakan karena saya yakin masalahnya adalah shell independen dan berkaitan dengan Git atau konfigurasinya sendiri.
Marcin Kłopotek

Jawaban:

159

Oke, saya bereksperimen sedikit dan menemukan bahwa perintah Windows Git sebenarnya membutuhkan variabel UNIX seperti LC_ALLuntuk menampilkan Polandia (atau karakter UTF-8 lainnya) dengan benar. Coba saja perintah ini:

set LC_ALL=C.UTF-8

Kemudian nikmati hasilnya. Inilah yang terjadi di konsol saya (font "Consolas", tidak chcpperlu):

CMD konsol Windows


Memperbarui:

  • Nah, agar perintah Windows seperti type(menampilkan file di konsol) berfungsi dengan benar, Anda memerlukannya chcp 65001.
  • Dan jika Anda lebih suka perintah dari Git Bash seperti catAnda mendapat untung dari yang disebutkan di atas set LC_ALL=C.UTF-8.

CMD konsol Windows, bagian 2


Pembaruan 2: Cara membuat perubahan permanen

Seperti yang dikatakan pengguna mono blaine , buat variabel lingkungan LC_ALLdan tetapkan nilainya C.UTF-8, baik secara global atau hanya untuk profil pengguna Anda sendiri (maaf untuk tangkapan layar Jerman):

Buat variabel lingkungan

Lain kali Anda membuka konsol prosesor perintah (cmd.exe), Anda akan melihat nilai variabel saat mengeluarkan perintah echo %LC_ALL%. Di PowerShell, Anda akan melihatnya saat menerbitkan $env:LC_ALL.

Cara termudah untuk membuat halaman kode UTF-8 permanen ist untuk membuka regeeditdan menambahkan nilai baru bernama Autorundari jenis string ke bagian HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Command Processordan menetapkan nilainya chcp 65001.

Editor pendaftaran

Selanjutnya, perintah ini akan dijalankan setiap kali Anda membuka konsol cmd.exe baru. Anda bahkan melihat keluarannya di jendela baru: "Aktive Codepage: 65001." (atau serupa dalam bahasa Anda masing-masing).

Oh, omong-omong: Untuk menampilkan file yang dikodekan UTF-8 dengan benar di PowerShell Anda dapat menggunakan Get-Content -encoding UTF8 file.txtatau cat -encoding UTF8 file.txt( catmenjadi alias untuk Get-Contentdi PowerShell).

kriegaex.dll
sumber
Set LC_ALLtidak dibutuhkan oleh git itu sendiri. Alat lain - dikirimkan dengan git installaion - seperti less, yang merupakan pager default / lihat core.pager menggunakan LC_ALLnilainya. Nilai valid lainnya adalah bahasa lokal misalnya: LC_ALL=de_DE.UTF-8for the germans.
42
1
Anda dapat mengatur variabel lingkungan dari baris perintah menggunakansetx LC_ALL C.UTF-8
anion
Powershell 6 di ConEmu, itu cukup untuk ditambahkan $env.LC_ALL='ClUTF-8'ke$Profile
Andrew Spencer
67

Jika ada yang tertarik dengan PowerShell yang setara set LC_ALL=C.UTF-8, yaitu:

$env:LC_ALL='C.UTF-8'

Namun ini hanya berfungsi untuk sesi saat ini. Untuk membuatnya permanen, ada dua kemungkinan:

  • buat variabel lingkungan yang diberi nama LC_ALLdengan nilaiC.UTF-8
  • atau masukkan ke $env:LC_ALL='C.UTF-8'dalam $Profilefile Anda
mono blaine
sumber
1
Atau tambahkan ke profil PowerShell Anda (saya lebih suka ini ke pengaturan global karena saya menggunakan profil yang sama - via git - di beberapa mesin).
Richard
3
File profil dapat diedit dengan misalnya menjalankan: notepad $ profile Kemudian tambahkan baris di suatu tempat seperti yang disarankan mono blaine, $ env: LC_ALL = 'C.UTF-8'
Tore Aurstad
Dengan PowerShell 6 + ConEmu di Windows 10: ini berfungsi, tidak ada lagi yang dibutuhkan
Andrew Spencer
6

Saya menggunakan Git melalui Powershell Core v7.0.3 dengan posh-git diinstal di dalam Terminal Windows pada Windows 10.

Saya telah melihat-lihat jawaban dan mencoba banyak di antaranya. Solusi yang berhasil untuk saya adalah:

Kedua solusi ini bekerja secara terpisah. Saya memilih untuk menggunakan perintah Git karena masalahnya tampaknya terkait dengan Git, dan profil Powershell tetap bersih.

Ayşe Nur
sumber
Terima kasih untuk pengaturan Git. Pengaturan Git berfungsi untuk saya, tetapi juga menemukan bahwa pengaturan $env:LESSCHARSET='utf-8'berfungsi dengan baik juga untuk PowerShell 5 di Terminal Windows.
mloskot
5

Saya menggunakan git bashpada WIN10. Bagi saya, 4 pengaturan membuat tampilan sesuai harapan saya.

  • envpengaturan. Tambahkan LC_ALL=C.UTF-8, LESSCHARSET=UTF-8ke PATHsecara global.

  • gitconfig. git config --global i18n.logOutputEncoding utf-8.

  • git bashpengaturan. Setel Options-> Text-> Character setke utf-8. Atau atur localedan Character setkeduanya menjadi default. Cukup pintar untuk memilih yang benar encoding.

Selesai.

W. Perrin
sumber
Saya menggunakan gitpada prompt perintah Windows, dan dua langkah pertama menyelesaikan masalah untuk kasus saya.
nglee
0

Saya harus menggunakan command prompt windows PowerShell daripada yang default (Windowkey + X)

john ktejik
sumber
0

Saya punya masalah seperti itu di Linux. Dan masalahnya adalah saya tidak membuat lokal. Jadi keluaran saya localeadalah cantaining semua huruf "C", tanpa UTF-8. Untuk mengatasi ini, saya menghapus komentar en_US.UTF-8dan ru_RU.UTF-8di /etc/locale.gen. Kemudian saya menjalankan localectl set-locale LANG = ru_RU.UTF-8 dan mem-boot ulang. Dan masuk kembali ke sistem. Setelah itu ciryllic ditampilkan secara normal.

Seekor hiu
sumber