विंडोज कमांड लाइन में यूनिकोड वर्णों का उपयोग कैसे करें?


316

हमारे पास टीम फाउंडेशन सर्वर (टीएफएस) में एक परियोजना है जिसमें एक गैर-अंग्रेजी चरित्र (š) है। जब हम किसी समस्या से जूझ रहे हैं, तो कुछ बिल्ड-संबंधी चीजों को स्क्रिप्ट करने की कोशिश कर रहे हैं - हम š पत्र को कमांड-लाइन टूल्स में पास नहीं कर सकते हैं । कमांड प्रॉम्प्ट या और क्या नहीं इसे गड़बड़ करता है, और tf.exe उपयोगिता निर्दिष्ट प्रोजेक्ट नहीं पा सकती है।

मैंने .bat फ़ाइल (ANSI, UTF-8 के साथ और BOM के बिना ) के साथ-साथ जावास्क्रिप्ट में स्क्रिप्टिंग (जो यूनिकोड अंतर्निहित है) के लिए विभिन्न स्वरूपों की कोशिश की है - लेकिन कोई भाग्य नहीं। मैं एक कार्यक्रम को कैसे निष्पादित करूं और इसे एक यूनिकोड कमांड लाइन पास करूं?


1
@JohannesDewender - कॉपी-पेस्ट गलत हुआ?
विल्क्स-

2
पायथन 3.6: "विंडोज पर डिफ़ॉल्ट कंसोल उस संस्करण के साथ सभी यूनिकोड वर्णों को स्वीकार करता है" (ठीक है, मेरे लिए यह सबसे) लेकिन आपको कंसोल को कॉन्फ़िगर करने की आवश्यकता है: विंडोज़ के शीर्ष पर राइट क्लिक करें (सीएमडी या पायथन आईडीएलई के) ), डिफ़ॉल्ट रूप में / फ़ॉन्ट "ल्यूसिडा कंसोल" चुनें।
जिनसाव



2
@ LưuV LnhPhúc - नहीं, यह कंसोल में पाठ प्रदर्शित करने के बजाय यूनिकोड कमांड लाइन तर्क पारित करने के बारे में है। कंसोल बिल्कुल भी शामिल नहीं हो सकता है।
विल्क्स-

जवाबों:


68

मेरी पृष्ठभूमि: मैं एक सांत्वना में यूनिकोड इनपुट / आउटपुट का उपयोग वर्षों से करता हूं (और इसे दैनिक रूप से करता हूं। इसके अलावा, मैं इस कार्य के लिए समर्थन उपकरण विकसित करता हूं)। बहुत कम समस्याएं हैं, जहाँ तक आप निम्नलिखित तथ्यों / सीमाओं को समझते हैं:

  • CMDऔर "कंसोल" असंबंधित कारक हैं। CMD.exeकेवल एक प्रोग्राम है जो "कंसोल" ("कंसोल एप्लिकेशन") के अंदर काम करने के लिए तैयार है।
  • AFAIK, CMDयूनिकोड के लिए पूर्ण समर्थन है; किसी भी कोडपेज के सक्रिय होने पर आप सभी यूनिकोड चार्ट में प्रवेश कर सकते हैं ।
  • विंडोज के कंसोल में यूनिकोड के लिए बहुत समर्थन है - लेकिन यह सही नहीं है (बस "अच्छा पर्याप्त"; नीचे देखें)।
  • chcp 65001बहुत खतरनाक है। जब तक कि किसी प्रोग्राम को विशेष रूप से विंडोज के एपीआई में दोषों के आसपास काम करने के लिए डिज़ाइन नहीं किया गया था (या एक सी रनटाइम लाइब्रेरी का उपयोग करता है, जिसमें ये वर्कअराउंड हैं), यह मज़बूती से काम नहीं करेगा। Win8 इन समस्याओं के ½ को ठीक करता है cp65001, लेकिन बाकी अभी भी Win10 पर लागू है
  • में काम करता हूँ cp1252। जैसा कि मैंने पहले ही कहा था: एक सांत्वना में इनपुट / आउटपुट यूनिकोड के लिए, किसी को कोडपेज सेट करने की आवश्यकता नहीं है

विवरण

  • यूनिकोड को एक कंसोल में पढ़ने / लिखने के लिए, एक एप्लिकेशन (या इसके सी रनटाइम लाइब्रेरी) को File-I/Oएपीआई, लेकिन Console-I/Oएपीआई का उपयोग करने के लिए पर्याप्त स्मार्ट होना चाहिए । (एक उदाहरण के लिए, देखें कि पायथन यह कैसे करता है ।)
  • इसी तरह, यूनिकोड कमांड-लाइन तर्कों को पढ़ने के लिए, एक एप्लिकेशन (या इसके सी रनटाइम लाइब्रेरी) को संगत एपीआई का उपयोग करने के लिए पर्याप्त स्मार्ट होना चाहिए।
  • कंसोल फ़ॉन्ट रेंडरिंग केवल BMP (अन्य शब्दों में: नीचे U+10000) में यूनिकोड वर्णों का समर्थन करता है । केवल सरल पाठ प्रतिपादन का समर्थन किया जाता है (इसलिए यूरोपीय - और कुछ पूर्व एशियाई - भाषाओं को ठीक काम करना चाहिए - जहां तक ​​कि कोई पहले से इस्तेमाल किए गए रूपों का उपयोग करता है)। [ पूर्वी एशियाई के लिए और यू + 0000, यू + 0001, यू + 30 एफबी के पात्रों के लिए यहां एक छोटा ठीक प्रिंट है।]

व्यावहारिक सोच

  • चूक खिड़की पर बहुत उपयोगी नहीं हैं। सर्वोत्तम अनुभव के लिए, किसी को विन्यास के 3 टुकड़े करने चाहिए:

    • आउटपुट के लिए: एक व्यापक कंसोल फ़ॉन्ट। सर्वोत्तम परिणामों के लिए, मैं अपने बिल्ड की सलाह देता हूं । (स्थापना निर्देश वहां मौजूद हैं - और इस पृष्ठ पर अन्य उत्तरों में भी सूचीबद्ध हैं।)
    • इनपुट के लिए: एक सक्षम कीबोर्ड लेआउट। सर्वोत्तम परिणामों के लिए, मैं अपने लेआउट की सलाह देता हूं
    • इनपुट के लिए: यूनिकोड के हेक्स इनपुट की अनुमति दें
  • कंसोल एप्लिकेशन (बहुत तकनीकी) में "पास्टिंग" के साथ एक और गेटा:

    • हेक्स इनपुट पर एक चरित्र उद्धार KeyUpकी Alt; एक चरित्र को वितरित करने के अन्य सभी तरीके होते हैं KeyDown; इतने सारे एप्लिकेशन एक चरित्र को देखने के लिए तैयार नहीं हैं KeyUp। (केवल Console-I/Oएपीआई का उपयोग करने वाले अनुप्रयोगों पर लागू होता है ।)
    • निष्कर्ष: कई एप्लिकेशन HEX इनपुट घटनाओं पर प्रतिक्रिया नहीं करेंगे।
    • इसके अलावा, "पास्ट" वर्ण के साथ क्या होता है, यह वर्तमान कीबोर्ड लेआउट पर निर्भर करता है: यदि चरित्र को उपसर्ग कुंजियों का उपयोग किए बिना टाइप किया जा सकता है (लेकिन संशोधक के मनमाने ढंग से जटिल संयोजन के साथ Ctrl-Alt-AltGr-Kana-Shift-Gray*) तो यह एक उत्सर्जित कुंजीपट पर दिया जाता है। यह वही है जो किसी भी आवेदन की अपेक्षा करता है - इसलिए किसी भी चीज को चिपकाना जिसमें केवल ऐसे अक्षर ठीक हैं।
    • हालाँकि, "अन्य" वर्णों को HEX इनपुट का अनुकरण करके दिया जाता है ।

    निष्कर्ष : जब तक कि आपका कीबोर्ड लेआउट उपसर्ग कुंजियों के बिना A LOT वर्णों के इनपुट का समर्थन नहीं करता है, तब तक कुछ बग अनुप्रयोग आपकेPasteकंसोल के UI के माध्यम सेवर्ण छोड़ सकते हैंAlt-Space E P:। ( यही कारण है कि मैं अपने कीबोर्ड लेआउट का उपयोग करने की सलाह देता हूं!)

यह भी ध्यान रखना चाहिए कि विंडोज के लिए "वैकल्पिक, 'अधिक सक्षम' कंसोल ' बिल्कुल भी कंसोल नहीं हैं । वे Console-I/OAPI का समर्थन नहीं करते हैं, इसलिए जो प्रोग्राम इन API पर काम करने के लिए भरोसा करते हैं वे कार्य नहीं करेंगे। (जो प्रोग्राम केवल "फाइल-आई / ओ एपीआई को कंसोल फाइलहैंडल्स" का उपयोग करते हैं, हालांकि ठीक काम करेगा।)

इस तरह के गैर-कंसोल का एक उदाहरण माइक्रो सॉफ्ट का एक हिस्सा है Powershell। मैं उसे इस्तेमाल नहीं करती; प्रयोग, प्रेस और जारी करने के लिए WinKey, फिर टाइप करें powershell


(दूसरी ओर, ऐसे कार्यक्रम भी हैं ConEmuया ANSICONजो अधिक करने की कोशिश करते हैं: वे Console-I/O"सच्चे कंसोल एप्लिकेशन" काम करने के लिए एपीआई को बाधित करने के लिए "प्रयास " करते हैं। यह निश्चित रूप से खिलौना उदाहरण कार्यक्रमों के लिए काम करता है; वास्तविक जीवन में, यह हो सकता है या; आपकी विशेष समस्याओं का समाधान नहीं हो सकता है।

सारांश

  • सेट फ़ॉन्ट, कीबोर्ड लेआउट (और वैकल्पिक रूप से, हेक्स इनपुट की अनुमति दें)।

  • केवल उन्हीं प्रोग्राम्स का उपयोग करें जो Console-I/Oएपीआई के माध्यम से जाते हैं, और यूनिकोड कमांड-लाइन तर्कों को स्वीकार करते हैं। उदाहरण के लिए, किसी भी- cygwinमाइक्रोमैक्स वाले कार्यक्रम को ठीक होना चाहिए। जैसा कि मैंने पहले ही कहा, CMDठीक भी है।

UPD: प्रारंभ में, बग के लिए cp65001, मैं कर्नेल और CRTL परतों ( UPD²: और Windows उपयोगकर्ता-मोड API!) को मिला रहा था । इसके अलावा: Win8 इस बग का एक आधा तय करता है; मैंने "बेहतर कंसोल" एप्लिकेशन के बारे में अनुभाग को स्पष्ट किया, और एक संदर्भ जोड़ा कि पायथन यह कैसे करता है।


ठीक है, यह पूरी तरह से कुछ के लिए , आप स्वीकृत उत्तर के लायक हैं! बहुत बढ़िया!
विल्क्स-

5
मैं C ++ का नौसिखिया हूं और ध्यान से पढ़ने के बाद इस उत्तर को समझ नहीं सकता। क्या कोई इस बारे में मेरी मदद कर सकता है या कोई आसान व्याख्या कर सकता है?
रिक

@ बाची के लिए धन्यवाद, मुझे पता चला कि मेरे कीबोर्ड लेआउट के v73 (ऊपर उल्लेखित) कुछ समर्थन फाइलों को याद कर रहे थे। अब तय हो गया! (मेरी .logफाइलों को देखते हुए , यह एक आंतरायिक बग है zip -ru[?] में। इसे डीबग करने का कोई सुराग नहीं है - या भविष्य में इससे बचें ...)
इल्या ज़खरेविच

@ रिक: सही है! मैंने पायथन में एक वर्कअराउंड के लिए एक लिंक जोड़ा (लेकिन मुझे अभी पैच का सीधा लिंक नहीं मिल सकता है ...)।
इल्या ज़खेरेविच सेप

@IlyaZakharevich: D धन्यवाद। लेकिन मैं किसी तरह विंडोज पर यूनिकोड का उपयोग करना छोड़ देता हूं। मैं बाद में लिनक्स का उपयोग करने जा रहा हूं।
रिक

387

प्रयत्न:

chcp 65001

जो कोड पृष्ठ को UTF-8 में बदल देगा। इसके अलावा, आपको ल्यूसिडा कंसोल फोंट का उपयोग करने की आवश्यकता है।


18
क्या आप जानते हैं कि क्या इसे डिफ़ॉल्ट बनाने का कोई तरीका है?
अन्नपूर्णे

82
ध्यान दें कि विंडोज के कोड पृष्ठ 65001 में गंभीर कार्यान्वयन कीड़े हैं जो कई अनुप्रयोगों को तोड़ देंगे जो सी मानक पुस्तकालय IO विधियों पर निर्भर करते हैं, इसलिए यह बहुत नाजुक है। (बैच फाइलें भी 65001 में काम करना बंद कर देती हैं।) दुर्भाग्य से UTF-8 विंडोज में दूसरे दर्जे का नागरिक है।
21

7
@bobince क्या आपके पास विंडोज कोड पेज 65001 सपोर्ट में बग का उदाहरण है? मैं उत्सुक हूं क्योंकि मैंने कभी एक में भाग नहीं लिया है, और गुग्लिंग ने कुछ भी नहीं किया है। (बैच फ़ाइलें निश्चित रूप से काम करना बंद कर देती हैं, लेकिन UTF-8 शायद ही एक दूसरे दर्जे का नागरिक है ...)
रोमन स्टार्कोव

17
@romkyns: मेरी समझ यह है कि नंबर-बाइट्स (जैसे fread / fwrite / etc) को वापस करने वाले कॉल वास्तव में नंबर-ऑफ-कैरेक्टर लौटाते हैं। यह कई तरह के लक्षणों का कारण बनता है, जैसे अधूरा इनपुट-रीडिंग, फफ्लश में लटका हुआ, टूटी हुई बैच फाइलें और इसी तरह। कुछ पृष्ठभूमि। CJK "मल्टीबाइट" स्थानों के लिए उपयोग किए जाने वाले डिफ़ॉल्ट कोड पृष्ठों को इसे ठीक करने के लिए विशेष हैंडल बनाया गया है, लेकिन 65001 नहीं - यह समर्थित नहीं है
बोबिसन

7
यहां दिलचस्प सवाल हालांकि - बग है क्योंकि यह बाइट्स को रिपोर्ट करना चाहिए और इसके बजाय वर्णों की रिपोर्ट करना चाहिए - या क्योंकि इसका उपयोग करने वाले अनुप्रयोगों ने बाइट्स = वर्णों को गलत तरीके से ग्रहण किया है? दूसरे शब्दों में, क्या यह एपीआई विफल है या एपीआई उपयोग विफल है?
बेसिक

36

मुझे एक ही समस्या थी (मैं चेक गणराज्य से हूं)। मेरे पास विंडोज की अंग्रेजी स्थापना है, और मुझे एक साझा ड्राइव पर फ़ाइलों के साथ काम करना है। फ़ाइलों के पथ में चेक-विशिष्ट वर्ण शामिल हैं।

समाधान जो मेरे लिए काम करता है:

बैच फ़ाइल में, चार्ट पृष्ठ को बदलें

मेरी बैच फ़ाइल:

chcp 1250
copy "O:\VEŘEJNÉ\ŽŽŽŽŽŽ\Ž.xls" c:\temp

बैच फ़ाइल को CP 1250 में सहेजा जाना है।

ध्यान दें कि कंसोल वर्णों को सही ढंग से नहीं दिखाएगा, लेकिन यह उन्हें समझ जाएगा ...


1
चीयर्स! मुझे इसकी आवश्यकता थी ताकि मैं अपने बैच फ़ाइल के भीतर कॉपीराइट चरित्र का इनपुट कर सकूं।
ली हेस

यह आपके लिए भी लगभग समान स्थिति में मेरे लिए पूरी तरह से काम करता है। इसके बजाय मेरे पथ निहित आयरिश गेलिक वर्ण यानी á, é, í, ó, और ú
सीनियॉ

@ इवना जो मेरे "तुर्की पात्रों और नेटवर्क समस्या पर पथ में स्थान हल करती है"। तुम महान हो।
caglaror

इन संसाधनों को भी खोजें: msdn.microsoft.com/en-us/library/windows/desktop/… , ss64.com/nt/chcp.html , technet.microsoft.com/en-us/library/bb490464.aspx तुर्की chcp 857 है।
caglaror

2
आपको शायद पात्रों को सही ढंग से प्रदर्शित करने के लिए अलग-अलग फ़ॉन्ट का उपयोग करने की आवश्यकता है, ल्यूसिडा कंसोल मेरे लिए काम करता है।
वल्स्टिमिल ओवसिक्क

29

गैर-यूनिकोड कार्यक्रमों के लिए भाषा की जाँच करें। अगर आपको विंडोज कंसोल में रूसी की समस्या है, तो आपको यहां रूसी सेट करना चाहिए:

गैर-यूनिकोड कार्यक्रमों के लिए भाषा बदलना


6
यह यूनिकोड के लिए समर्थन को सक्षम नहीं करता है cmd, यह केवल डिफ़ॉल्ट कोडपेज को स्विच करता है cp866जो अभी भी 8-बिट वर्ण सेट है। यहां तक ​​कि cp866इसके बजाय इसका उपयोग करता है cp1251जो मुसीबत के अपने shitload जोड़ता है।
ivan_pozdeev

1
मुझे नए विंडोज 10 संस्करणों में नए विकल्प के लिए नीचे दिए गए उत्तर भी देखें
zvi

14

विंडोज कंसोल के डिफ़ॉल्ट कोडपेज को बदलना काफी मुश्किल है। जब आप वेब खोजते हैं तो आपको विभिन्न प्रस्ताव मिलते हैं, हालांकि उनमें से कुछ आपके विंडोज को पूरी तरह से तोड़ सकते हैं, अर्थात आपका पीसी अब बूट नहीं होता है।

सबसे सुरक्षित समाधान यह है: अपनी रजिस्ट्री कुंजी पर जाएं HKEY_CURRENT_USER\Software\Microsoft\Command Processorऔर स्ट्रिंग मान जोड़ें Autorun= chcp 65001

या आप इस छोटे बैच-स्क्रिप्ट का उपयोग सबसे आम कोड पृष्ठों के लिए कर सकते हैं।

@ECHO off

SET ROOT_KEY="HKEY_CURRENT_USER"


FOR /f "skip=2 tokens=3" %%i in ('reg query HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Nls\CodePage /v OEMCP') do set OEMCP=%%i

ECHO System default values:

ECHO.
ECHO ...............................................
ECHO Select Codepage 
ECHO ...............................................
ECHO.
ECHO 1 - CP1252
ECHO 2 - UTF-8
ECHO 3 - CP850
ECHO 4 - ISO-8859-1
ECHO 5 - ISO-8859-15
ECHO 6 - US-ASCII
ECHO.
ECHO 9 - Reset to System Default (CP%OEMCP%)
ECHO 0 - EXIT
ECHO.


SET /P  CP="Select a Codepage: "

if %CP%==1 (
    echo Set default Codepage to CP1252
    reg add "%ROOT_KEY%\Software\Microsoft\Command Processor" /v Autorun /t REG_SZ /d "@chcp 1252>nul" /f
) else if %CP%==2 (
    echo Set default Codepage to UTF-8
    reg add "%ROOT_KEY%\Software\Microsoft\Command Processor" /v Autorun /t REG_SZ /d "@chcp 65001>nul" /f
) else if %CP%==3 (
    echo Set default Codepage to CP850
    reg add "%ROOT_KEY%\Software\Microsoft\Command Processor" /v Autorun /t REG_SZ /d "@chcp 850>nul" /f
) else if %CP%==4 (
    echo Set default Codepage to ISO-8859-1
    add "%ROOT_KEY%\Software\Microsoft\Command Processor" /v Autorun /t REG_SZ /d "@chcp 28591>nul" /f
) else if %CP%==5 (
    echo Set default Codepage to ISO-8859-15
    add "%ROOT_KEY%\Software\Microsoft\Command Processor" /v Autorun /t REG_SZ /d "@chcp 28605>nul" /f
) else if %CP%==6 (
    echo Set default Codepage to ASCII
    add "%ROOT_KEY%\Software\Microsoft\Command Processor" /v Autorun /t REG_SZ /d "@chcp 20127>nul" /f
) else if %CP%==9 (
    echo Reset Codepage to System Default
    reg delete "%ROOT_KEY%\Software\Microsoft\Command Processor" /v AutoRun /f
) else if %CP%==0 (
    echo Bye
) else (
    echo Invalid choice
    pause
)

आउटपुट @chcp 65001>nulको chcp 65001दबाने के बजाय "सक्रिय कोड पृष्ठ: 65001" का उपयोग करने से आपको हर बार जब आप एक नई कमांड लाइन विंडो शुरू करते हैं।

सभी उपलब्ध संख्या की एक पूरी सूची आप कोड पेज पहचानकर्ताओं से प्राप्त कर सकते हैं

ध्यान दें, सेटिंग्स केवल वर्तमान उपयोगकर्ता के लिए लागू होंगी। यदि आप इसे सभी उपयोगकर्ताओं के लिए सेट करना पसंद करते हैं, तो लाइन SET ROOT_KEY="HKEY_CURRENT_USER"को बदलेंSET ROOT_KEY="HKEY_LOCAL_MACHINE"


अच्छा विचार और प्रयोग करने योग्य उदाहरण भी!

13

दरअसल, चाल यह है कि कमांड प्रॉम्प्ट वास्तव में इन गैर-अंग्रेजी वर्णों को समझता है, बस उन्हें सही ढंग से प्रदर्शित नहीं कर सकता है।

जब मैं कमांड प्रॉम्प्ट में एक पथ दर्ज करता हूं जिसमें कुछ गैर-अंग्रेजी chracters होते हैं, तो इसे "?? ?????????" के रूप में प्रदर्शित किया जाता है। जब आप अपने आदेश (cd "??? ?????? ?????" मेरे मामले में) जमा करते हैं, तो सब कुछ उम्मीद के मुताबिक काम कर रहा है।


2
यह शायद थोड़ा खतरनाक है क्योंकि आपको नामकरण संघर्ष मिल सकता है। उदाहरण के लिए, यदि आपके पास दो फाइलें हैं जो दोनों "???" के रूप में प्रस्तुत करती हैं, और आप "सीडी ???" दर्ज करते हैं यह नहीं पता होगा कि किसका उपयोग करना है (या बदतर एक मनमाना चुनना होगा)।
जॉन

26
आप दर्ज नहीं करते हैं ???, आप वास्तविक नाम दर्ज करते हैं जो इसे केवल ??? के रूप में प्रदर्शित किया जा रहा है। इसे पासवर्ड इनपुट बॉक्स के रूप में सोचें। आप जो भी दर्ज करते हैं वह *** के रूप में प्रदर्शित होता है, लेकिन प्रस्तुत मूल पाठ है।
यूजर

यह वास्तव में कमांड प्रॉम्प्ट में कमांड चलाने के लिए वास्तव में काम करता है। हालाँकि, .cmdबैच फ़ाइल चलाने के साथ , मुझे अभी भी बैच फ़ाइल chcp 65001के शीर्ष पर रखना होगा ।
वारबैंक

आपके मामले में, यह एक फ़ॉन्ट समस्या है ... सामग्री वहां है, बस इसे प्रदर्शित करने के लिए कोई उचित फ़ॉन्ट नहीं है। लेकिन ओपी अलग है।
पश्चिमीगुन

11

Windows 10 x64 मशीन पर, मैंने कमांड प्रॉम्प्ट को गैर-अंग्रेज़ी वर्णों द्वारा प्रदर्शित किया:

एक उन्नत कमांड प्रॉम्प्ट खोलें (प्रशासक के रूप में CMD.EXE चलाएँ)। कंसोल के लिए उपलब्ध ट्रू टाइप फ़ॉन्ट के लिए अपनी रजिस्ट्री को क्वेरी करें:

    REG query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Console\TrueTypeFont"

आपको एक आउटपुट दिखाई देगा जैसे:

    0    REG_SZ    Lucida Console
    00    REG_SZ    Consolas
    936    REG_SZ    *新宋体
    932    REG_SZ    *MS ゴシック

अब हमें एक ट्रू टाइप फ़ॉन्ट जोड़ने की आवश्यकता है जो आपको कोरियर न्यू जैसे पात्रों की आवश्यकता है। हम स्ट्रिंग नाम में शून्य जोड़कर ऐसा करते हैं, इसलिए इस मामले में अगला "000" होगा:

    REG ADD "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Console\TrueTypeFont" /v 000 /t REG_SZ /d "Courier New"

अब हम UTF-8 समर्थन लागू करते हैं:

    REG ADD HKCU\Console /v CodePage /t REG_DWORD /d 65001 /f

"कूरियर न्यू" के लिए डिफ़ॉल्ट फ़ॉन्ट सेट करें:

    REG ADD HKCU\Console /v FaceName /t REG_SZ /d "Courier New" /f

फ़ॉन्ट का आकार 20 पर सेट करें:

    REG ADD HKCU\Console /v FontSize /t REG_DWORD /d 20 /f

यदि आप चाहें तो त्वरित संपादन सक्षम करें:

    REG ADD HKCU\Console /v QuickEdit /t REG_DWORD /d 1 /f

3
सामान्य तौर पर कोडपेज 65001 के उपयोग से विंडोज 10 में बग के बिना ही क्रिएटर अपडेट के साथ काम किया जा सकेगा। विंडोज 7 में यह आउटपुट और इनपुट बग दोनों होंगे। विंडोज 8 और विंडोज 10 के पुराने संस्करणों में केवल इनपुट बग है, जो इनपुट को 7-बिट एएससीआईआई तक सीमित करता है।
इरीक सन

6

जैसा कि मैंने पायथन 2.7 के लिए कोई पूर्ण उत्तर नहीं देखा है, मैं दो महत्वपूर्ण चरणों और एक वैकल्पिक कदम को रेखांकित करूंगा जो काफी उपयोगी है।

  1. आपको यूनिकोड समर्थन के साथ एक फ़ॉन्ट की आवश्यकता है। विंडोज ल्यूसिडा कंसोल के साथ आता है जिसे कमांड प्रॉम्प्ट के टाइटल बार पर राइट क्लिक करके और Defaultsविकल्प पर क्लिक करके चुना जा सकता है। इससे रंगों तक पहुंच भी मिलती है। ध्यान दें कि आप Propertiesइसके बजाय चुनकर कुछ तरीकों से निर्दिष्ट कमांड विंडो के लिए सेटिंग्स भी बदल सकते हैं (जैसे, यहां खोलें, विजुअल स्टूडियो) ।
  2. आपको कोड पृष्ठ सेट करने की आवश्यकता है cp65001, जो कमांड प्रॉम्प्ट के लिए UTF-7 और UTF-8 समर्थन की पेशकश करने के लिए Microsoft का प्रयास प्रतीत होता है। chcp 65001कमांड प्रॉम्प्ट में चलाकर ऐसा करें । एक बार सेट होने के बाद, यह इस तरह से रहता है जब तक खिड़की बंद नहीं होती। आपको हर बार cmd.exe लॉन्च करते समय इसे फिर से करना होगा।

अधिक स्थायी समाधान के लिए, सुपर उपयोगकर्ता पर इस उत्तर को देखें । संक्षेप में, REG_SZregedit का उपयोग करके HKEY_LOCAL_MACHINE\Software\Microsoft\Command Processorऔर इसे नाम दें (स्ट्रिंग) प्रविष्टि बनाएँ AutoRun। इसका मान बदलें chcp 65001। यदि आप कमांड से आउटपुट संदेश नहीं देखना चाहते हैं, तो @chcp 65001>nulइसके बजाय उपयोग करें ।

कुछ कार्यक्रमों में इस एन्कोडिंग के साथ बातचीत करने में परेशानी होती है, मिनगवे एक उल्लेखनीय है जो एक त्रुटि संदेश के साथ संकलन करते समय विफल रहता है। बहरहाल, यह बहुत अच्छी तरह से काम करता है और अधिकांश कार्यक्रमों के साथ बग का कारण नहीं बनता है।


5

मुझे यह विधि विंडोज 10 के नए संस्करणों में उपयोगी लगी:

इस सुविधा को चालू करें: "बीटा: दुनिया भर में भाषा समर्थन के लिए यूनिकोड यूटीएफ -8 का उपयोग करें"

नियंत्रण कक्ष -> क्षेत्रीय सेटिंग्स -> प्रशासनिक टैब-> सिस्टम स्थान बदलें ...

क्षेत्र सेटिंग्स


कैसे शक्तियां या cmd का उपयोग करके इसे प्राप्त करने के लिए?
कोरी

मैं कंसोल में चीनी अक्षरों को प्रदर्शित करने की कोशिश कर रहा हूं और ऐसा करने से विंडोज 10 64-बिट (तुर्की में स्थापित और बाद में अंग्रेजी में बदल गया) पर काम नहीं किया गया। अगला, मैं चीनी भाषा को स्थापित करने की कोशिश करूंगा और देखूंगा कि क्या यह काम करता है।
अकिनुरी

4

एक बहुत ही सरल विकल्प यह है कि विंडोज बैश शेल को मिनगॉव के रूप में स्थापित करें और इसका उपयोग करें:

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

थोड़ा सीखने की अवस्था है क्योंकि आपको यूनिक्स कमांड लाइन कार्यक्षमता का उपयोग करने की आवश्यकता होगी, लेकिन आपको इसकी शक्ति पसंद होगी और आप कंसोल वर्ण को UTF-8 पर सेट कर सकते हैं।

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

निश्चित रूप से आपको सभी सामान्य * निक्स उपहार भी मिलते हैं जैसे कि ग्रीप, फाइंड, कम, आदि।


इस (पुराने) मामले में, मुद्दा कंसोल के बजाय स्क्रिप्ट के साथ था। बैश स्क्रिप्ट का उपयोग कर इसे हल करेंगे?
विल्क्स-

हां, वे लकड़ी की बैश लिपियों को UTF-8 के रूप में चिह्नित कर सकते हैं और बस विंडोज़ बैच फ़ाइलों की तुलना में बहुत अधिक शक्ति के साथ काम करते हैं - मुझे पता है कि यह एक पुराना मामला था लेकिन सोचा था कि यह विकल्प भविष्य के संदर्भ के लिए फ़्लैग करने लायक था क्योंकि एमएस नहीं लगता है। यूनिकोड में बहुत बेहतर होना।
स्टीव बार्न्स


आउटपुट UTF-8 एन्कोडेड वर्ण ठीक हैं। लेकिन इनपुट अभी भी सिस्टम कोडपेज द्वारा एन्कोडेड है।
रिक

1
यदि आप Git का उपयोग करते हैं तो Windows उपयोगकर्ताओं के पास पहले से ही एक bash शेल हो सकता है: बस Git> Git Bash विंडो खोलें।
स्कोमीसा

3

इसी तरह की समस्या के लिए, (मेरी समस्या कमांड प्रॉम्प्ट पर MySQL से UTF-8 वर्ण दिखाने के लिए थी),

मैंने इसे इस तरह हल किया:

  1. मैंने कमांड प्रॉम्प्ट के फॉन्ट को ल्यूसिडा कंसोल में बदल दिया। (यह कदम आपकी स्थिति के लिए अप्रासंगिक होना चाहिए। यह केवल आपको स्क्रीन पर दिखाई देने वाली चीज़ों के साथ करना है, न कि वास्तव में चरित्र के साथ।)

  2. मैंने कोडपेज को विंडोज -1253 में बदल दिया। आप इसे कमांड प्रॉम्प्ट पर "chcp 1253" द्वारा करें। इसने मेरे केस के लिए काम किया जहाँ मैं UTF-8 देखना चाहता था।


7
Windws-1253 एक यूनिकोड कोडपेज नहीं है। यह एक मानक 256-वर्ण कोडपेज है। जाहिरा तौर पर आपने केवल उन अक्षरों का उपयोग किया है जो उस कोडपेज में प्रदर्शित किए जा सकते हैं, लेकिन यह सार्वभौमिक नहीं होगा।
विल्क्स- 13

3

यह समस्या काफी कष्टप्रद है। मेरे फाइलनाम और फ़ाइल सामग्री में आमतौर पर चीनी चरित्र होता है। कृपया ध्यान दें कि मैं विंडोज 10 का उपयोग कर रहा हूं, यहां मेरा समाधान है:

फ़ाइल का नाम प्रदर्शित करने के लिए , जैसे कि dirया lsयदि आपने विंडोज 10 पर उबंटू बैश स्थापित किया है

  1. गैर-utf 8 वर्ण का समर्थन करने के लिए क्षेत्र सेट करें।

  2. उसके बाद, कंसोल का फ़ॉन्ट उस स्थान के फ़ॉन्ट में बदल जाएगा, और यह कंसोल के एन्कोडिंग को भी बदल देता है।

आदेश पंक्ति उपकरण का उपयोग करके UTF-8 फ़ाइल की फ़ाइल सामग्री प्रदर्शित करने के लिए, आपने पिछले चरण किए हैं

  1. पृष्ठ को utf-8 द्वारा बदलें chcp 65001
  2. ऐसे फॉन्ट में बदलें जो utf-8 को सपोर्ट करता है, जैसे कि Lucida Console
  3. typeफ़ाइल सामग्री को देखने के लिए कमांड का उपयोग करें , या catयदि आपने विंडोज 10 पर उबंटू बैश स्थापित किया है
  4. कृपया ध्यान दें कि, कंसोल की एन्कोडिंग को utf-8 में सेट करने के बाद, मैं चीनी इनपुट पद्धति का उपयोग करके cmd में चीनी चरित्र नहीं लिख सकता।

सबसे आसान समाधान: बस http://cmder.net/ जैसे कंसोल एमुलेटर का उपयोग करें


यह मेरे लिए नहीं था। pointकमांड के आउटपुट में चीनी अक्षर अभी भी विकृत हैं।
शुकिंग यू

@SiqingYu मैं पागल सेटिंग छोड़ देता हूं। बस का उपयोग blog.miniasp.com/post/2015/09/27/Useful-tool-Cmder.aspx
code4j

मैंने पहले Cmder का उपयोग किया था, लेकिन यह Visual Studio द्वारा उपयोग किए जाने वाले डेवलपर कंसोल को प्रतिस्थापित नहीं कर सकता है।
शुकिंग यू

@SiqingYu क्या आपका मतलब सी # इंटरएक्टिव पॉवरशेल है?
कोड

इंटरएक्टिव पावर शेल नहीं, बल्कि विजुअल C ++ द्वारा उपयोग किया जाने वाला डेवलपर कंसोल। यह Win32 कंसोल अनुप्रयोग प्रोजेक्ट्स में डिफ़ॉल्ट डीबग कंसोल है।
यू

2

मुझे यहाँ कई उत्तर दिखाई देते हैं, लेकिन वे इस प्रश्न का समाधान नहीं करते हैं - उपयोगकर्ता कमांड लाइन से यूनिकोड इनपुट प्राप्त करना चाहता है।

Windows दो बाइट स्ट्रिंग्स में एन्कोडिंग के लिए UTF-16 का उपयोग करता है, इसलिए आपको अपने प्रोग्राम में OS से इन्हें प्राप्त करना होगा। इसे करने के दो तरीके हैं -

1) Microsoft के पास एक विस्तार है जो मुख्य को विस्तृत वर्ण सरणी लेने की अनुमति देता है: int wmain (int argc, wchar_t * argv []]; https://msdn.microsoft.com/en-us/library/6wd819wh.aspx

2) कमांड लाइन wchar_t win_argv = (wchar_t ) CommandLineToArgvW (GetCommandLineW (), और nargs) का यूनिकोड संस्करण प्राप्त करने के लिए windows api को कॉल करें ; https://docs.microsoft.com/en-us/windows/desktop/api/shellapi/nf-shellapi-commandlinetoargvw

इसे पढ़ें: विस्तृत जानकारी के लिए http://utf8everywhere.org , खासकर यदि आप अन्य ऑपरेटिंग सिस्टम का समर्थन कर रहे हैं।


आह, नहीं, मुझे क्षमा करें, लेकिन आपने प्रश्न याद किया। यह तब है जब मैं एक कार्यक्रम लिख रहा हूं जो यूनिकोड वर्ण प्राप्त करेगा । मेरा प्रश्न यूनिकोड वर्णों को किसी अन्य कार्यक्रम में भेजने के बारे में था (जो उन्हें प्राप्त करने की उम्मीद का समर्थन करता है, लेकिन मेरे पास वास्तव में डिस्सैम्प के अलावा कोई रास्ता नहीं है)।
विल्क्स-

2

जून 2019 से, विंडोज 10 के साथ, आपको कोडपेज नहीं बदलना होगा।

" विंडोज टर्मिनल का परिचय " ( कायला दालचीनी से ) और माइक्रोसॉफ्ट / टर्मिनल देखें
कॉन्सोल फ़ॉन्ट के उपयोग के माध्यम से, आंशिक यूनिकोड समर्थन प्रदान किया जाएगा।

Microsoft/Terminal387 अंक में प्रलेखित :

वर्तमान में यूनिकोड में 87,887 विचारधाराएँ हैं। आपको उन सभी की भी आवश्यकता है?
हमें एक सीमा की आवश्यकता है, और उस सीमा से परे के पात्रों को फॉन्टबैक / फॉन्ट लिंकिंग / जो भी हो, द्वारा नियंत्रित किया जाना चाहिए।

क्या कॉनसोल को कवर करना चाहिए:

  • सीएलआई में आधुनिक ओएसएस कार्यक्रमों द्वारा उपयोग किए जाने वाले प्रतीकों के रूप में उपयोग किए जाने वाले वर्ण।
  • इन पात्रों को कॉनसोल के डिजाइन और मैट्रिक्स का पालन करना चाहिए, और मौजूदा कॉन्सोल के पात्रों के साथ ठीक से गठबंधन करना चाहिए।

क्या कॉनसोल को कवर नहीं करना चाहिए:

  • लिपियों के वर्ण और विराम चिह्न जो लैटिन, ग्रीक और सिरिलिक से परे हैं, विशेष रूप से वर्णों को जटिल आकार देने (जैसे अरबी) की आवश्यकता होती है।
  • इन वर्णों को फ़ॉन्ट कमबैक के साथ संभाला जाना चाहिए।

1

जब आप कंप्यूटर अपने रास्ते / फ़ाइल का नाम सही दिखाते हैं तो .bat फ़ाइलों के लिए एक त्वरित निर्णय जब आप इसे डॉस-विंडो में टाइप करते हैं:

  1. प्रतिलिपि con temp.txt [प्रेस दर्ज करें]
  2. पथ / फ़ाइल नाम टाइप करें [Enter दबाएँ]
  3. प्रेस Ctrl-Z [Enter दबाएं]

इस तरह आप एक .txt फ़ाइल बनाते हैं - temp.txt। इसे नोटपैड में खोलें, टेक्स्ट को कॉपी करें (चिंता न करें कि यह अपठनीय लगेगा) और इसे अपनी .bat फ़ाइल में पेस्ट करें। निष्पादित .bat ने DOS- विंडो में इस तरह से बनाया कि mT (साइरिलिक, बल्गेरियाई) के लिए काम किया।


1

एक बेहतर क्लीनर चीज़: बस उपलब्ध, मुफ़्त, जापानी जापानी भाषा पैक को स्थापित करें। (अन्य प्राच्य भाषा पैक भी काम करेंगे, लेकिन मैंने जापानी एक का परीक्षण किया है।)

यह आपको ग्लिफ़ के बड़े सेट के साथ फोंट देता है, उन्हें डिफ़ॉल्ट व्यवहार करता है, विभिन्न विंडोज टूल्स जैसे कि सीएमडी, वर्डपैड, आदि बदलता है।


1

कोड पेज को 1252 में बदलना मेरे लिए काम कर रहा है। मेरे लिए समस्या यह है कि डबल डोलर for विंडोज सर्वर 2008 पर डॉस द्वारा दूसरे प्रतीक में परिवर्तित हो रहा है।

मैंने अपने BCP कथन ^ it में इससे पहले CHCP 1252 और एक टोपी का उपयोग किया है।


धन्यवाद यह काम करता है! मुझे नहीं पता कि लोगों ने इसे क्यों वोट दिया, यह कुछ लोगों के लिए एक वैध विकल्प है। यह कोडपेज 1252 समस्या को विंडोज सर्वर 2012 पर भी ठीक करता है, जहां सीपी 65001 वाला समान कोड मेरे लिए काम नहीं करता था। मुझे लगता है कि यह इस बात पर निर्भर करता है कि बैच स्क्रिप्ट किस कोड पेज के साथ संपादित की गई थी, या ओएस डिफॉल्ट्स। इस मामले में इसे एन-यूएस बेस ओएस के साथ एक जर्मन मीयूआई मशीन पर नोटपैड के साथ बनाया गया था
टोनी वॉल

0

मुझे यूनिकोड-नाम वाली फ़ाइलों को उनके संक्षिप्त (8 डॉट 3) नामों से बैच फ़ाइल में संदर्भित करके एक समान समस्या के आसपास मिला।

संक्षिप्त नामों को करके देखा जा सकता है dir /x। जाहिर है, यह केवल यूनिकोड फ़ाइल नामों के साथ काम करता है जो पहले से ही ज्ञात हैं।

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