Windows 10 कमांड प्रॉम्प्ट पर git लॉग आउटपुट एन्कोडिंग समस्याएँ


89

मुसीबत

git logविंडोज़ कमांड प्रॉम्प्ट पर कमांड आउटपुट को ठीक से कैसे प्रदर्शित किया जाए?

उदाहरण

git कमांड को समस्या की ओर ले जाता है जैसा कि आप देख सकते हैं कि मैं विशिष्ट वर्णों को ठीक से टाइप कर सकता हूं लेकिन git logआउटपुट पर किसी तरह बच जाता है। UTF-8एन्कोडिंग तालिका के अनुसार आउटपुट से एंगल्ड कोष्ठक ( <और >) के बीच कोड पहले से टाइप किए गए git configमापदंडों के अनुरूप हैं ।

मैंने इसी तरह के मुद्दे के जवाब में से एक के रूप में LESSCHARSETपर्यावरण चर को सेट करने की कोशिश की है, लेकिन फिर आउटपुट की आड़ है:utf-8

LESSCHARSET = utf8 सेट करने के बाद git लॉग आउटपुट

मुझे पता .git/configहै कि यह ठीक से इनकोडेड utf-8है gitkजैसा कि उम्मीद के मुताबिक है।

उचित gitk आउटपुट

localeयदि आवश्यक हो तो यहां कमांड आउटपुट है

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=

संपादित करें:

आउटपुट शुद्ध गिट-बैश में भी समान है :

यहाँ छवि विवरण दर्ज करें

इसलिए मेरा मानना ​​है कि समस्या स्वतंत्र है और Git या इसके कॉन्फ़िगरेशन से संबंधित है।



हां, मैंने बिना किसी परिणाम के 65001 (UTF-8) सहित कई कोड पृष्ठ आज़माए। ऐसा लगता है कि gc लॉग आउटपुट प्रदर्शित होने पर chcp कमांड का कोई प्रभाव नहीं है। यह हमेशा उसी तरह से प्रदर्शित होता है।
मार्सिन क्लोपोटेक

1
क्षमा करें यदि प्रश्न बेवकूफ लगता है, लेकिन आप Git Bash के बजाय Windows कमांड प्रॉम्प्ट का उपयोग क्यों करते हैं? यह Git का उपयोग करने के लिए बेहतर अनुकूल है, विंडो पूरी स्क्रीन तक रहने योग्य है, प्रॉम्प्ट स्वचालित रूप से आपको दिखाता है कि आप किस शाखा पर हैं आदि
kriegaex

यह बेवकूफ नहीं है @kriegaex, यह वास्तव में अच्छा है। मैं रोजमर्रा के उपयोग के लिए कॉनमू में लिपटे गिट-बैश का उपयोग कर रहा हूं। परिणाम समान i.imgur.com/hMKz9D3r.png है । मैंने अपनी समस्या का वर्णन cmd.exe के साथ उदाहरण देते हुए किया है कि मैं अन्य आश्रित साधनों वाले लोगों को भ्रमित न करूं क्योंकि मैं मानता हूं कि समस्या स्वतंत्र है और गिट या इसके विन्यास से संबंधित है।
मार्सिन क्लोपोटेक

जवाबों:


159

ठीक है, मैंने थोड़ा प्रयोग किया और पाया कि विंडोज गिट कमांड को वास्तव में UNIX चर की आवश्यकता है जैसे LC_ALLपोलिश (या अन्य UTF-8 वर्ण) को सही ढंग से प्रदर्शित करने के लिए। बस इस आदेश का प्रयास करें:

set LC_ALL=C.UTF-8

फिर परिणाम का आनंद लें। यहाँ मेरे कंसोल पर क्या हुआ (फ़ॉन्ट "कंसोल", chcpआवश्यक नहीं ):

Windows कंसोल CMD


अपडेट करें:

  • ठीक है, विंडोज कमांड के लिए जैसे type(कंसोल पर डिस्प्ले फ़ाइल) सही ढंग से काम करने के लिए, आपको आवश्यकता है chcp 65001
  • और अगर आप Git Bash से कमांड पसंद करते हैं जैसे कि catआप उपरोक्त से लाभ set LC_ALL=C.UTF-8

विंडोज कंसोल सीएमडी, भाग 2


अद्यतन 2: परिवर्तनों को स्थायी कैसे करें

जैसा कि उपयोगकर्ता मोनो ब्लेन ने कहा है, एक पर्यावरण चर बनाएं LC_ALLऔर इसे C.UTF-8विश्व स्तर पर या अपने स्वयं के उपयोगकर्ता प्रोफ़ाइल के लिए ही असाइन करें (जर्मन स्क्रीनशॉट के लिए खेद है):

पर्यावरण चर बनाएं

अगली बार जब आप कमांड प्रोसेसर कंसोल खोलते हैं (cmd.exe) तो आपको कमांड जारी करते समय वैरिएबल मान देखना चाहिए echo %LC_ALL%। PowerShell में आपको इसे जारी करते समय देखना चाहिए $env:LC_ALL

UTF-8 कोड पेज को स्थायी ist बनाने के लिए सबसे सरल तरीका है कि अनुभाग में टाइप स्ट्रिंग regeeditनाम Autorunका एक नया मान खोलें और जोड़ें HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Command Processorऔर इसे मान असाइन करें chcp 65001

पंजीकरण संपादक

इसके बाद, जब भी आप एक नया cmd.exe कंसोल खोलते हैं, तो इस कमांड को निष्पादित किया जाएगा। आप नई विंडो में इसका आउटपुट भी देख सकते हैं: "Aktive कोडपेज: 65001।" (या अपनी संबंधित भाषा में समान)।

ओह, वैसे: PowerShell में UTF-8 एन्कोडेड फ़ाइल को सही ढंग से प्रदर्शित करने के लिए आप PowerShell में ( Get-Content -encoding UTF8 file.txtया एक उपनाम के रूप में) का उपयोग कर सकते हैं ।cat -encoding UTF8 file.txtcatGet-Content


सेट LC_ALLकी जरूरत नहीं है। अन्य उपकरण - गिट इंस्टा के साथ शिप किए गए - जैसे less, जो डिफ़ॉल्ट पेजर है / कोर देखें। पेजर LC_ALLमान का उपयोग कर रहे हैं । अन्य मान्य मूल्य स्थानीयकृत लैंग उदाहरण हैं: LC_ALL=de_DE.UTF-8जर्मनों के लिए।
13:42 पर वापसी42

1
आप उपयोग कर कमांडलाइन से पर्यावरण के चर सेट कर सकते हैंsetx LC_ALL C.UTF-8
ऋणायन

कॉनम्यू में पॉवर्सशेल 6, यह जोड़ने के $env.LC_ALL='ClUTF-8'लिए पर्याप्त था$Profile
एंड्रयू स्पेंसर

67

अगर किसी को PowerShell के बराबर में दिलचस्पी है set LC_ALL=C.UTF-8, वह है:

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

हालाँकि यह केवल वर्तमान सत्र के लिए काम करता है। इसे स्थायी बनाने के लिए, दो संभावनाएँ:

  • LC_ALLमान के साथ नामित एक पर्यावरण चर बनाएँC.UTF-8
  • या $env:LC_ALL='C.UTF-8'अपनी $Profileफ़ाइल में रखें

1
या इसे अपने PowerShell प्रोफ़ाइल में जोड़ें (मैं इसे वैश्विक सेटिंग के लिए पसंद करता हूं क्योंकि मैं एक ही प्रोफ़ाइल का उपयोग करता हूं - गिट के माध्यम से - कई मशीनों पर)।
रिचर्ड

3
प्रोफ़ाइल फ़ाइल को उदाहरण के लिए चलाकर संपादित किया जा सकता है: नोटपैड $ प्रोफ़ाइल तब कहीं एक रेखा जोड़ें जैसा कि मोनो ब्लेन ने सुझाव दिया, $ env: LC_ALL = 'C.UTF-8'
Tore Aurstad

Windows 10 पर PowerShell 6 + ConEmu के साथ: यह काम करता है, और कुछ नहीं चाहिए था
एंड्रयू स्पेन्सर

6

मैं विंडोज 10 पर विंडोज टर्मिनल के अंदर पॉश-गिट स्थापित के साथ पॉवर्सशेल कोर v7.0.3 के माध्यम से गिट का उपयोग कर रहा हूं ।

मैं उत्तर के माध्यम से ब्राउज़ कर रहा हूं और उनमें से कई को आजमा रहा हूं। मेरे लिए काम करने वाले उपाय थे:

ये समाधान दोनों अलग-अलग काम करते हैं। मैंने Git कमांड का उपयोग करने के लिए चुना क्योंकि समस्या Git से संबंधित प्रतीत होती है, और Powershell प्रोफ़ाइल क्लीनर रहती है।


Git सेटिंग के लिए धन्यवाद। Git सेटिंग्स मेरे लिए काम करती हैं, लेकिन यह भी पाया गया कि सेटिंग $env:LESSCHARSET='utf-8'विंडोज टर्मिनल में PowerShell 5 के लिए ठीक काम करती है।
mloskot

5

git bashपर उपयोग करता हूं WIN10। मेरे लिए, 4 सेटिंग्स मेरी अपेक्षा के अनुसार उपस्थिति बनाती हैं।

  • envस्थापना। जोड़े LC_ALL=C.UTF-8, LESSCHARSET=UTF-8के लिए PATHविश्व स्तर पर।

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

  • git bashस्थापना। को सेट Options-> Text-> Character setकरें utf-8। या सेट localeऔर Character setदोनों को default। यह सही चुनने के लिए पर्याप्त स्मार्ट है encoding

किया हुआ।


मैं gitविंडोज कमांड प्रॉम्प्ट पर उपयोग करता हूं , और पहले दो चरणों ने मेरे मामले के लिए समस्या को हल किया।
19'19

0

मुझे डिफ़ॉल्ट एक (Windowkey + X) के स्थान पर विंडोज़ पॉवरशेल कमांड प्रॉम्प्ट का उपयोग करना पड़ा


0

मुझे लिनक्स पर ऐसी समस्या थी। और समस्या यह थी कि मैंने स्थान नहीं बनाए थे। इसलिए मेरा आउटपुट localeUTF-8 के बिना, सभी "C" अक्षरों को छांट रहा था। इसे हल करने के लिए, मैंने असहज किया en_US.UTF-8और ru_RU.UTF-8/etc/locale.gen में। फिर मैं स्थानीयकृत सेट-लोकेल LANG = ru_RU.UTF-8 चलाता हूं और रिबूट किया जाता हूं। और सिस्टम को फिर से देखा। उसके बाद सिरिलिक को सामान्य रूप से प्रदर्शित किया गया।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.