Windows komut satırında unicode karakterler nasıl kullanılır?


316

Team Foundation Server'da (TFS) İngilizce olmayan bir karakter (š) bulunan bir projemiz var. Bir derlemeyle ilgili birkaç şeyi kodlamaya çalışırken bir sorunla karşılaştık - š harfini komut satırı araçlarına geçiremeyiz . Komut istemi veya başka bir şey onu bozmaz ve tf.exe yardımcı programı belirtilen projeyi bulamaz.

Ben .bat dosyası için farklı biçimleri denedim (ANSI, UTF-8 ile ve olmadan BOM ) yanı sıra JavaScript scripting (ki Unicode doğal olduğunu) - ama hayır şans. Bir programı nasıl yürütebilir ve Unicode komut satırından geçirebilirim ?


1
@JohannesDewender - Kopyala-yapıştır yanlış mı gitti?
Vilx-

2
Python 3.6: "Windows'daki varsayılan konsol, bu sürüme sahip tüm Unicode karakterleri kabul eder" (pek çoğu, benim için) AMA konsolu yapılandırmanız gerekir: pencerelerin üstüne (cmd veya python IDLE) sağ tıklayın ), varsayılan / yazı tipinde "Lucida konsolu" nu seçin.
JinSnow



2
@ LưuVĩnhPhúc - Hayır, bu konsolda metin görüntülemek yerine unicode komut satırı argümanlarını iletmekle ilgilidir. Konsol hiç karışmayabilir.
Vilx-

Yanıtlar:


68

Geçmişim: Unicode giriş / çıkışını yıllarca bir konsolda kullanıyorum (ve bunu günlük olarak çok yapıyorum. Ayrıca, tam olarak bu görev için destek araçları geliştiriyorum). Aşağıdaki gerçekleri / sınırlamaları anladığınız kadarıyla çok az sorun vardır:

  • CMDve "konsol" ilgisiz faktörlerdir. CMD.exebir konsolun içinde “çalışmaya” hazır olan programlardan sadece biridir (“konsol uygulamaları”).
  • AFAIK, CMDUnicode için mükemmel desteğe sahiptir; herhangi bir kod sayfası etkinken tüm Unicode karakterlerini girebilir / çıktılayabilirsiniz.
  • Windows konsolunda Unicode için çok destek var - ama mükemmel değil (sadece “yeterince iyi”; aşağıya bakınız).
  • chcp 65001çok tehlikeli. Bir program, Windows API'sindeki kusurları gidermek için özel olarak tasarlanmadıysa (veya bu geçici çözümlere sahip bir C çalışma zamanı kitaplığı kullanmıyorsa), güvenilir bir şekilde çalışmaz. Win8, bu sorunları fix giderir cp65001, ancak geri kalanı Win10 için de geçerlidir .
  • Çalışıyorum cp1252. Daha önce de söylediğim gibi: Bir konsolda Unicode girmek / çıktı almak için kod sayfasını ayarlamanız gerekmez .

Ayrıntılar

  • Bir konsola Unicode okumak / yazmak için bir uygulama (veya C çalışma zamanı kitaplığı) File-I/OAPI değil, API kullanacak kadar akıllı olmalıdır Console-I/O. (Örneğin, Python'un bunu nasıl yaptığına bakın .)
  • Benzer şekilde, Unicode komut satırı bağımsız değişkenlerini okumak için bir uygulamanın (veya C çalışma zamanı kitaplığının) karşılık gelen API'yı kullanacak kadar akıllı olması gerekir.
  • Konsol yazı tipi oluşturma yalnızca BMP'deki Unicode karakterleri destekler (başka bir deyişle: aşağıda U+10000). Yalnızca basit metin oluşturma desteklenir (bu nedenle, önceden oluşturulmuş formları kullandığı sürece, Avrupa ve bazı Doğu Asya dilleri iyi çalışmalıdır). [ Burada Doğu Asya ve U + 0000, U + 0001, U + 30FB karakterleri için küçük bir baskı var.]

Pratik hususlar

  • Varsayılan Window çok yararlı değildir. En iyi deneyim için, 3 konfigürasyon ayarlanmalıdır:

    • Çıktı için: kapsamlı bir konsol fontu. En iyi sonuçlar için, yapılarımı tavsiye ederim . (Kurulum talimatları orada bulunur - ve ayrıca bu sayfadaki diğer cevaplarda listelenir.)
    • Giriş için: yetenekli bir klavye düzeni. En iyi sonuçlar için düzenlerimi öneririm .
    • Giriş için: Unicode'un HEX girişine izin verin .
  • Bir konsol uygulamasına “Yapıştırma” ile bir tane daha var (çok teknik):

    • HEX girişi bir karakter verir KeyUparasında Alt; bir karakteri teslim etmenin diğer tüm yolları gerçekleşir KeyDown; pek çok uygulama bir karakteri görmeye hazır değil KeyUp. (Yalnızca Console-I/OAPI kullanan uygulamalar için geçerlidir .)
    • Sonuç: birçok uygulama HEX giriş olaylarına tepki vermeyecektir.
    • Ayrıca, "Yapıştırılan" bir karakterle ne olacağı geçerli klavye düzenine bağlıdır: karakter önek tuşları kullanılmadan (ancak içinde olduğu gibi rastgele karmaşık değiştirici kombinasyonuyla) yazılabilirse, Ctrl-Alt-AltGr-Kana-Shift-Gray*öykünülmüş bir tuşa basılarak teslim edilir. Herhangi bir uygulamanın beklediği şey budur - bu yüzden sadece bu karakterleri içeren her şeyi yapıştırmak iyidir.
    • Ancak, “diğer” karakterler HEX girişi öykünerek verilir .

    Sonuç : öneki anahtarları olmadan karakter LOT sizin klavye düzeni destekler girişi, sürece bazı arabası uygulamaları zaman size karakterleri atlayabilirsinizPasteKonsolunun UI aracılığıyla:Alt-Space E P. ( Bu yüzden klavye düzenlerimi kullanmanızı öneririm!)

Bir de Windows için “alternatif, 'daha yetenekli' konsolları” olduğunu akılda tutmak gerekir hiç konsolları değildir . Console-I/OAPI'leri desteklemezler , bu nedenle çalışmak için bu API'lara dayanan programlar çalışmaz. (Bununla birlikte, yalnızca “Konsol dosya tanıtıcılarında Dosya-G / Ç API'leri” kullanan programlar iyi çalışır.)

Konsol dışı bu tür bir örnek, MicroSoft's'un bir parçasıdır Powershell. Kullanmıyorum; deneme yapmak için basın ve bırakın WinKey, ardından yazın powershell.


(Öte yandan, daha fazlasını yapmaya çalışan ConEmuya ANSICONda daha fazlasını yapmaya çalışan programlar vardır : Console-I/O“gerçek konsol uygulamaları” nın da çalışması için API'leri durdurmaya çalışırlar. Bu kesinlikle oyuncak örnek programları için çalışır; gerçek hayatta bu ya da sorunlarınızı çözmeyebilir. Deneme.)

özet

  • yazı tipini, klavye düzenini ayarlayın (ve isteğe bağlı olarak HEX girişine izin verin).

  • yalnızca Console-I/OAPI'lerden geçen ve Unicode komut satırı bağımsız değişkenlerini kabul eden programları kullanın . Örneğin, herhangi bir cygwinderlenmiş program iyi olmalıdır. Daha önce de söylediğim gibi CMD, iyi de.

UPD: Başlangıçta, bir hata için cp65001, Çekirdek ve CRTL katmanlarını ( UPD²: ve Windows kullanıcı modu API!) Karıştırıyordum . Ayrıca: Win8 bu hatanın yarısını düzeltir; “Daha iyi konsol” uygulaması hakkındaki bölümü netleştirdim ve Python'un bunu nasıl yaptığına bir referans ekledim.


Tamam, bu kadar kapsamlı bir şey için, kabul edilen cevap olmayı hak ediyorsunuz! Müthiş!
Vilx-

5
C ++ 'a yeni başladım ve dikkatle okuduktan sonra bu cevabı anlayamıyorum. Birisi bana bu konuda yardımcı olabilir veya daha kolay bir açıklama yapabilir mi?
Rick

@Bachi Bachi sayesinde, klavye düzenimin (yukarıda belirtilen) v73'ünde bazı destek dosyaları eksik olduğunu öğrendim. Şimdi düzeltildi! (Benim bakılırsa .logdosyalar, bu bir aralıklı hata olduğunu zip -ruvar hiç hata ayıklamak nasıl ipucu [?!] -. Gelecekte veya önlemek ...)
İlya Zakharevich

@ Rick: Doğru! Python'da bir geçici çözüm için bir bağlantı ekledim (ancak şu anda düzeltme ekine doğrudan bir bağlantı bulamıyorum…).
Ilya Zakharevich

@IlyaZakharevich: D Teşekkürler. Ama bir şekilde Windows'ta unicode kullanmaktan vazgeçiyorum. Linux'u daha sonra kullanacağım.
Rick

387

Deneyin:

chcp 65001

kod sayfasını UTF-8 olarak değiştirir. Ayrıca, Lucida konsol yazı tiplerini kullanmanız gerekir.


18
Bunu varsayılan yapmanın bir yolu olup olmadığını biliyor musunuz?
AnnanFay

82
Windows kod sayfası 65001 desteğinde C standart kitaplık IO yöntemlerine dayanan birçok uygulamayı kıracak ciddi uygulama hataları olduğuna dikkat edin, bu çok kırılgandır. (Toplu iş dosyaları da sadece 65001'de çalışmayı bırakır.) Maalesef UTF-8, Windows'ta ikinci sınıf bir vatandaştır.
bobince

7
@bobince Windows kod sayfası 65001 desteğinde bir hata örneği var mı? Merak ediyorum çünkü hiç bir zaman karşılaşmadım ve googling de hiçbir şey yapmadı. (Toplu dosyalar elbette çalışmayı durdurur, ancak UTF-8 neredeyse ikinci sınıf bir vatandaş değildir ...)
Roman Starkov

17
@romkyns: Anladığım kadarıyla, bayt sayısı (fread / fwrite / etc gibi) döndüren çağrıların aslında bir dizi karakter döndürdüğü. Bu, eksik giriş okuma, fflush'da asılı kalma, bozuk toplu dosyalar vb.Gibi çok çeşitli semptomlara neden olur. Biraz arka plan. CJK "çokbaytlı" yerel ayarlar için kullanılan varsayılan kod sayfaları, bunu düzeltmek için yerleşik özel işleme sahiptir, ancak 65001 desteklemez - desteklenmez .
bobince

7
Ancak burada ilginç bir soru - hata bayt raporlaması ve bunun yerine karakterleri raporlaması gerektiği için mi - yoksa onu kullanan uygulamalar bayt = karakterleri yanlış mı varsayıyor? Başka bir deyişle, bir API hatası mı yoksa API kullanımı başarısız mı?
Temel

36

Aynı problemim vardı (Çek Cumhuriyeti'ndenim). Windows'u İngilizce olarak yükledim ve paylaşılan bir sürücüdeki dosyalarla çalışmam gerekiyor. Dosya yolları Çekçe'ye özgü karakterleri içerir.

Benim için çalışan çözüm:

Toplu iş dosyasında karakter kümesi sayfasını değiştirin

Toplu iş dosyam:

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

Toplu iş dosyası CP 1250'ye kaydedilmelidir.

Konsolun karakterleri doğru göstermeyeceğini, ancak onları anlayacağını unutmayın ...


1
Şerefe! Toplu iş dosyamdaki telif hakkı karakterini girebilmem için buna ihtiyacım vardı.
Lea Hayes

Bu senin için de neredeyse aynı bir durumda benim için mükemmel çalıştı. İrlanda Gal karakterler yani yerine benim yol içeriyordu á, é, í, ó, ve ú.
Seany84

@vanna "ağ sorunu yolundaki Türkçe karakterler ve boşluklarımı" çözdü. harikasın.
caglaror


2
Muhtemelen karakterleri doğru bir şekilde görüntülemek için farklı yazı tipi kullanmanız gerekiyordu, Lucida Konsolu benim için çalıştı.
Vlastimil Ovčáčík

29

Unicode olmayan programlar için dili kontrol edin. Windows konsolunda Rusça ile ilgili sorunlarınız varsa, burada Rusça ayarlamanız gerekir:

Unicode olmayan programlar için dili değiştirme


6
Bu, Unicode girişi desteğini etkinleştirmez cmd, yalnızca cp8668 bitlik bir karakter kümesi olan varsayılan kod sayfasını değiştirir . Hatta kendi bok yükünü ekleyen bunun cp866yerine kullanır cp1251.
ivan_pozdeev

1
Daha yeni Windows 10 sürümlerinde yeni seçenek için bana aşağıdaki cevaba da bakınız
Zvi

14

Windows konsolunun varsayılan Kod sayfasını değiştirmek oldukça zordur. Web'de arama yaptığınızda farklı teklifler bulursunuz, ancak bazıları Windows'unuzu tamamen bozabilir, yani bilgisayarınız artık önyükleme yapmaz.

En güvenli çözüm şudur: Kayıt Defteri anahtarınıza gidin HKEY_CURRENT_USER\Software\Microsoft\Command Processorve String value Autorun= öğesini ekleyin chcp 65001.

Veya en yaygın kod sayfaları için bu küçük Batch-Script'i kullanabilirsiniz.

@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
)

Kullanma @chcp 65001>nulyerine chcp 65001bastırır çıkışını "Etkin kod sayfası: 65001" Eğer yeni bir komut satırı pencereleri her başlattığınızda tanınacak.

Kod Sayfası Tanımlayıcılarından alabileceğiniz tüm mevcut numaraların tam listesi

Ayarların yalnızca geçerli kullanıcı için geçerli olacağını unutmayın. Tüm kullanıcılar için ayarlamak ister ise çizgi yerine SET ROOT_KEY="HKEY_CURRENT_USER"göreSET ROOT_KEY="HKEY_LOCAL_MACHINE"


güzel fikir ve kullanılabilir örnek!

13

Aslında, hile, komut isteminin bu İngilizce olmayan karakterleri gerçekten anlamasıdır, bunları doğru bir şekilde görüntüleyemez.

Komut istemine bazı İngilizce olmayan karakterler içeren bir yol girdiğimde "?????? ?????" şeklinde görüntülenir. Komutunuzu gönderdiğinizde (benim durumumda cd "??? ?????? ?????"), her şey beklendiği gibi çalışıyor.


2
Adlandırma çakışması yaşayabileceğiniz için bu muhtemelen biraz tehlikelidir. örneğin, her ikisi de "???" olarak işlenen ve "cd ???" hangisini kullanacağını bilemez (ya da daha kötüsü keyfi olanı seçer).
John

26
??? girmezsiniz, sadece görüntülenen gerçek adı girersiniz ???. Bir şifre giriş kutusu olarak düşünün. Girdiğiniz her şey *** olarak görüntülenir, ancak gönderilen orijinal metindir.
Kullanıcı

Bu, doğrudan komut isteminde çalışan komutlar için gerçekten işe yaradı. Ancak, bir .cmdtoplu iş dosyası çalıştırırken , yine chcp 65001de toplu iş dosyasının en üstüne koymanız gerekir .
wisbucky

Sizin durumunuzda, bu bir yazı tipi problemidir ... içerik oradadır, görüntülemek için uygun bir yazı tipi yoktur. Ama OP farklı.
WesternGun

11

Bir Windows 10 x64 makinesinde, komut istemini İngilizce olmayan karakterleri göstererek yaptım:

Yükseltilmiş bir komut istemi açın (CMD.EXE dosyasını yönetici olarak çalıştırın). Konsolda kullanılabilir TrueType yazı tipleri için kayıt defterinizi sorgulayın:

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

Şunun gibi bir çıktı göreceksiniz:

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

Şimdi Courier New gibi ihtiyacınız olan karakterleri destekleyen bir TrueType yazı tipi eklememiz gerekiyor. Bunu dize adına sıfır ekleyerek yaparız, bu durumda bir sonraki "000" olur:

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

Şimdi UTF-8 desteğini uyguluyoruz:

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

Varsayılan yazı tipini "Courier New" olarak ayarlayın:

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

Yazı tipi boyutunu 20 olarak ayarlayın:

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

İsterseniz hızlı düzenlemeyi etkinleştirin:

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

3
Genel olarak kod sayfası 65001'i kullanmak, Windows 10'da Creators güncellemesinde hata olmadan çalışır. Windows 7'de hem çıkış hem de giriş hataları olacaktır. Windows 8 ve Windows 10'un eski sürümlerinde, yalnızca girişi 7 bit ASCII ile sınırlayan giriş hatası vardır.
Eryk Sun

6

Python 2.7 için tam bir cevap görmediğim için, iki önemli adımı ve oldukça yararlı olan isteğe bağlı bir adımı özetleyeceğim.

  1. Unicode destekli bir yazı tipine ihtiyacınız var. Windows , komut isteminin başlık çubuğuna sağ tıklatıp Defaultsseçeneğe tıklanarak seçilebilen Lucida Konsolu ile birlikte gelir . Bu aynı zamanda renklere erişim sağlar. PropertiesBunun yerine seçerek belirli yollarla (örn. Burada aç, Visual Studio) çağrılan komut pencerelerinin ayarlarını da değiştirebileceğinizi unutmayın .
  2. cp65001Microsoft'un komut istemine UTF-7 ve UTF-8 desteği sunma girişimi gibi görünen kod sayfasını olarak ayarlamanız gerekir . Bunu chcp 65001komut isteminde çalıştırarak yapın . Ayarlandıktan sonra, pencere kapatılana kadar bu şekilde kalır. Cmd.exe'yi her başlattığınızda bunu yeniden yapmanız gerekir.

Daha kalıcı bir çözüm için Süper Kullanıcı'daki bu cevaba bakınız . Kısacası, REG_SZregedit at komutunu kullanarak bir (String) giriş oluşturun HKEY_LOCAL_MACHINE\Software\Microsoft\Command Processorve bunu adlandırın AutoRun. Değerini olarak değiştirin chcp 65001. Komuttan çıktı mesajını görmek istemiyorsanız @chcp 65001>nulbunun yerine kullanın.

Bazı programlar bu kodlama ile etkileşimde sorun yaşıyor, MinGW saçma bir hata mesajı ile derlenirken başarısız olan önemli bir program. Bununla birlikte, bu çok iyi çalışır ve programların çoğunda hatalara neden olmaz.


5

Bu yöntemi Windows 10'un yeni sürümlerinde yararlı buldum:

Bu özelliği açın: "Beta: Dünya çapında dil desteği için Unicode UTF-8 kullanın"

Kontrol paneli -> Bölgesel ayarlar -> Yönetim sekmesi-> Sistem yerel ayarını değiştir ...

Bölge Ayarları


Powershell veya cmd kullanarak bunu nasıl başarabilirim?
Corey

Konsolda Çince karakterler görüntülemeye çalışıyorum ve bunu Windows 10 64 bit (Türkçe olarak yüklendi ve daha sonra İngilizce olarak değiştirildi) üzerinde çalışmadı. Sonra, Çince dilini yüklemeye çalışacağım ve çalışıp çalışmadığını göreceğim.
akinuri

4

Gerçekten basit bir seçenek, MinGW gibi bir Windows bash kabuğu yüklemek ve bunu kullanmaktır:

Resim açıklamasını buraya girin

Unix komut satırı işlevini kullanmanız gerekeceğinden biraz öğrenme eğrisi var, ancak gücünü seveceksiniz ve konsol karakter setini UTF-8 olarak ayarlayabilirsiniz.

Resim açıklamasını buraya girin

Tabii ki grep, find, less, vb.Gibi her zamanki * nix güzelliklerini de alırsınız.


Bu (eski) durumda, sorun konsol yerine bir komut dosyasındaydı. Bh komut dosyalarını kullanmak bunu çözer mi?
Vilx-

Evet gerçekten ahşap bash komut dosyaları UTF-8 olarak işaretlenebilir ve sadece Windows toplu iş dosyalarından çok daha fazla güçle çalışır - Eski bir durum olduğunu biliyorum ama MS'in görünmemesi için seçeneğin gelecekteki referans için işaretlemeye değer olduğunu düşündüm Unicode'da çok daha iyi olmak için.
Steve Barnes


UTF-8 kodlu karakterlerin çıktısı iyidir. Ancak giriş hala sistem kod sayfası tarafından kodlanmaktadır.
Rick

1
Git'i kullanıyorsanız Windows kullanıcılarının zaten bir bash kabuğuna sahip olabileceğini eklemek için: sadece Git> Git Bash penceresini açın.
skomisa

3

Benzer bir sorun için, (benim sorunum komut isteminde MySQL'den UTF-8 karakterlerini göstermekti),

Ben böyle çözdüm:

  1. Komut isteminin yazı tipini Lucida Console olarak değiştirdim. (Bu adım sizin durumunuzla alakasız olmalıdır. Gerçekte karakterin ne olduğu ile değil, sadece ekranda gördüklerinizle ilgilidir).

  2. Kod sayfasını Windows-1253 olarak değiştirdim. Bunu "chcp 1253" komut isteminde yaparsınız. UTF-8'i görmek istediğim durumum için çalıştı.


7
Windws-1253 bir Unicode kod sayfası değildir. Standart 256 karakterlik bir kod sayfasıdır. Görünüşe göre sadece o kod sayfasında görüntülenebilen karakterler kullandınız, ancak evrensel olmayacak.
Vilx-

3

Bu problem oldukça can sıkıcı. Dosya adımda ve dosya içeriğimde genellikle Çince karakter var. Windows 10 kullanıyorum, işte benim çözümüm:

Görüntülemek için dosya adını gibi, dirya lsUbuntu, Windows 10 üzerinde bash yüklü ise

  1. Bölgeyi utf olmayan 8 karakteri destekleyecek şekilde ayarlayın.

  2. Bundan sonra, konsolun yazı tipi bu yerel ayarın yazı tipine dönüştürülür ve konsolun kodlamasını da değiştirir.

Önceki adımları uyguladıktan sonra, komut satırı aracını kullanarak UTF-8 dosyasının dosya içeriğini görüntülemek için

  1. Sayfayı şu şekilde utf-8 olarak değiştirin chcp 65001
  2. Lucida Konsolu gibi utf-8'i destekleyen yazı tipine geçin
  3. typeDosya içeriğini görmek için komut kullanın veya catWindows 10'da Ubuntu bash yüklediyseniz
  4. Konsolun kodlamasını utf-8 olarak ayarladıktan sonra, cmd'ye Çince giriş yöntemini kullanarak Çince karakter yazamadığımı lütfen unutmayın.

En tembel çözüm: Sadece http://cmder.net/ gibi bir konsol emülatörü kullanın


Bu benim için olmadı. pointKomuta çıkışındaki Çince karakterler hala karışık.
Ocak'ta Yu'yu

Çılgın ortamdan vazgeçiyorum. Sadece blog.miniasp.com/post/2015/09/27/Useful-tool-Cmder.aspx
adresini

Daha önce Cmder kullandım, ancak Visual Studio tarafından kullanılan geliştirici konsolunun yerini alamaz.
Ssuching Yu

@SiqingYu C # interaktif powershell mi demek istediniz?
code4j

Etkileşimli güç kabuğu değil, Visual C ++ tarafından da kullanılan geliştirici konsolu. Win32 Konsol Uygulaması projelerinde varsayılan hata ayıklama konsoludur.
Ssuching Yu

2

Burada birkaç cevap görüyorum, ancak soruyu ele almıyorlar - kullanıcı komut satırından Unicode girişi almak istiyor.

Windows, iki bayt dizede kodlama için UTF-16 kullanır, bu nedenle bunları programınızdaki işletim sisteminden almanız gerekir. Bunu yapmanın iki yolu vardır -

1) Microsoft, main'nin geniş bir karakter dizisi almasına izin veren bir uzantıya sahiptir: 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 () ve nargs) komut satırının unicode sürümünü almak için windows api'yi çağırın; https://docs.microsoft.com/en-us/windows/desktop/api/shellapi/nf-shellapi-commandlinetoargvw

Özellikle diğer işletim sistemlerini destekliyorsanız, ayrıntılı bilgi için şu adresi okuyun: http://utf8everywhere.org .


Ahh, hayır, üzgünüm, ama soruyu kaçırdınız. Bu unicode karakterleri alacak bir program yazarken içindir . Benim sorum unicode karakterleri başka bir programa göndermekle ilgili (umarım onları almayı destekler, ama gerçekten sökme dışında bilmenin hiçbir yolu yok).
Vilx-

2

Haziran 2019'dan itibaren Windows 10 ile kod sayfasını değiştirmeniz gerekmez.

Bkz. " Windows Terminaline Giriş " ( Kayla Cinnamon'dan ) ve Microsoft / Terminal .
Consolas yazı tipini kullanarak kısmi Unicode desteği sağlanacaktır.

Microsoft/TerminalSayı 387'de belgelendiği gibi :

Şu anda Unicode'da 87.887 ideogram var. Hepsine de ihtiyacınız var mı?
Bir sınıra ihtiyacımız var ve bu sınırın ötesindeki karakterler yazı tipi yedek / yazı tipi bağlantısı / ne olursa olsun ele alınmalıdır.

Consolas neleri kapsamalıdır:

  • CLI'daki modern OSS programları tarafından kullanılan semboller olarak kullanılan karakterler.
  • Bu karakterler, Consolas'ın tasarımını ve metriklerini izlemeli ve mevcut Consolas karakterleriyle düzgün bir şekilde hizalanmalıdır.

Ne Consolas kapsamamalıdır:

  • Latin, Yunan ve Kiril, özellikle de karakterlerin karmaşık şekillendirmeye (Arapça gibi) ihtiyaç duyduğu karakterler ve noktalama işaretleri.
  • Bu karakterler yazı tipi yedeğiyle ele alınmalıdır.

1

Bilgisayarınız DOS penceresine yazarken yol / dosya adınızı doğru görüntülüyorsa, .bat dosyaları için hızlı bir karar:

  1. kopya con temp.txt [Enter'a basın]
  2. Yolu / dosya adını yazın [Enter tuşuna basın]
  3. Basın Ctrl-Z [Enter tuşuna basın]

Bu şekilde .txt dosyası - temp.txt oluşturun. Not Defteri'nde açın, metni kopyalayın (okunamayacağından endişe etmeyin) ve .bat dosyanıza yapıştırın. DOS penceresinde bu şekilde oluşturulan .bat yürütmek mé (Kiril, Bulgarca) için çalıştı.


1

Yapılacak daha temiz bir şey: Sadece mevcut, ücretsiz, Microsoft Japonca dil paketini yükleyin. (Diğer oryantal dil paketleri de işe yarayacaktır, ancak Japonca'yı test ettim.)

Bu, daha büyük glif kümelerine sahip yazı tiplerini verir, bunları varsayılan davranış haline getirir, cmd, WordPad gibi çeşitli Windows araçlarını değiştirir.


1

Kod sayfasını 1252 olarak değiştirmek benim için çalışıyor. Benim için sorun çift doller § sembolü Windows Server 2008 üzerinde DOS tarafından başka bir sembole dönüştürüyor.

Ben BCP deyimim ^ § CHCP 1252 ve ondan önce bir kap kullandım.


Teşekkürler çalışıyor! Neden insanlar bu oy verdi bilmiyorum, bazı insanlar için geçerli bir alternatif .. Bu kod sayfası 1252 de CP 65001 ile aynı kod benim için işe yaramadı Windows Server 2012, sorunu giderir. Toplu komut dosyası ile düzenlenmiş kod sayfasına veya işletim sistemi varsayılanlarına bağlı olduğunu varsayalım. Bu durumda, en-US temel işletim sistemine sahip bir Alman MUI makinesinde Not Defteri ile oluşturuldu ..
Tony Wall

0

Ben kısa bir süre içinde (8 nokta 3) isimleri ile toplu iş dosyasında başvurarak Unicode adlı dosyaları silmek benzer bir sorun var.

Kısa isimler yaparak görülebilir dir /x. Açıkçası, bu yalnızca bilinen Unicode dosya adlarıyla çalışır.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.