Bagaimana cara menggunakan karakter unicode di baris perintah Windows?

317

Kami memiliki proyek di Team Foundation Server (TFS) yang memiliki karakter non-Inggris (š) di dalamnya. Saat mencoba membuat skrip beberapa hal yang berhubungan dengan build, kami menemukan masalah - kami tidak dapat meneruskan huruf š ke alat baris perintah. Prompt perintah atau yang tidak lain mengacaukannya, dan utilitas tf.exe tidak dapat menemukan proyek yang ditentukan.

Saya sudah mencoba berbagai format untuk file .bat (ANSI, UTF-8 dengan dan tanpa BOM ) serta membuat skrip dalam JavaScript (yang secara inheren adalah Unicode) - tetapi tidak berhasil. Bagaimana cara menjalankan program dan memberikannya baris perintah Unicode ?

Vilx-
sumber
1
@JohannesDewender - Copy-paste salah?
Vilx-
2
Python 3.6: "konsol default pada Windows menerima semua karakter Unicode dengan versi itu" (well, sebagian besar untuk saya) TETAPI Anda perlu mengkonfigurasi konsol: klik kanan di bagian atas jendela (dari cmd atau IDS python ), secara default / font pilih "Lucida console".
JinSnow
Kemungkinan duplikat dari Cara
Menghasilkan
2
@ LưuVĩnhPhúc - Tidak, ini tentang meneruskan argumen baris perintah unicode, daripada menampilkan teks di konsol. Konsol mungkin tidak terlibat sama sekali.
Vilx-

Jawaban:

68

Latar belakang saya: Saya menggunakan input / output Unicode di konsol selama bertahun-tahun (dan melakukannya setiap hari. Selain itu, saya mengembangkan alat pendukung untuk tugas ini). Ada beberapa masalah, sejauh Anda memahami fakta / batasan berikut:

  • CMDdan "konsol" adalah faktor yang tidak terkait. CMD.exeadalah salah satu dari program yang siap untuk "bekerja di dalam" konsol ("aplikasi konsol").
  • AFAIK, CMDmemiliki dukungan sempurna untuk Unicode; Anda dapat memasukkan / mengeluarkan semua karakter Unicode saat codepage apa pun aktif.
  • Konsol Windows memiliki BANYAK dukungan untuk Unicode - tetapi tidak sempurna (hanya "cukup baik"; lihat di bawah).
  • chcp 65001sangat berbahaya. Kecuali jika suatu program dirancang khusus untuk mengatasi cacat pada API Windows (atau menggunakan pustaka runtime C yang memiliki pemecahan masalah ini), itu tidak akan bekerja dengan andal. Win8 memperbaiki ½ dari masalah ini dengan cp65001, tetapi sisanya masih berlaku untuk Win10 .
  • Saya bekerja di cp1252. Seperti yang sudah saya katakan: Untuk input / output Unicode di konsol, orang tidak perlu mengatur codepage .

Rinciannya

  • Untuk membaca / menulis Unicode ke konsol, aplikasi (atau pustaka runtime C-nya) harus cukup pintar untuk menggunakan bukan File-I/OAPI, tetapi Console-I/OAPI. (Sebagai contoh, lihat bagaimana Python melakukannya .)
  • Demikian juga, untuk membaca argumen baris perintah Unicode, aplikasi (atau pustaka runtime C-nya) harus cukup pintar untuk menggunakan API yang sesuai.
  • Render font konsol hanya mendukung karakter Unicode di BMP (dengan kata lain: di bawah U+10000). Hanya rendering teks sederhana yang didukung (sehingga bahasa Eropa - dan beberapa Asia Timur - harus berfungsi dengan baik - sejauh seseorang menggunakan formulir yang sudah dikomposisi). [Ada cetakan kecil di sini untuk Asia Timur dan untuk karakter U + 0000, U + 0001, U + 30FB.]

Pertimbangan praktis

  • The default pada Jendela tidak sangat membantu. Untuk pengalaman terbaik, seseorang harus menyetel 3 buah konfigurasi:

    • Untuk keluaran: font konsol yang komprehensif. Untuk hasil terbaik, saya sarankan bangunan saya . (Instruksi pemasangan ada di sana - dan juga tercantum dalam jawaban lain di halaman ini.)
    • Untuk input: tata letak keyboard yang mampu. Untuk hasil terbaik, saya merekomendasikan tata letak saya .
    • Untuk input: izinkan input HEX dari Unicode .
  • Satu lagi gotcha dengan "Tempel" ke dalam aplikasi konsol (sangat teknis):

    • Input HEX memberikan karakter pada KeyUpdari Alt; semua cara lain untuk memberikan karakter terjadi pada KeyDown; begitu banyak aplikasi tidak siap untuk melihat karakter aktif KeyUp. (Hanya berlaku untuk aplikasi yang menggunakan Console-I/OAPI.)
    • Kesimpulan: banyak aplikasi tidak akan bereaksi pada peristiwa input HEX.
    • Selain itu, apa yang terjadi dengan karakter "Tempel" tergantung pada tata letak keyboard saat ini: jika karakter dapat diketik tanpa menggunakan kunci awalan (tetapi dengan kombinasi pengubah yang rumit dan sewenang-wenang, seperti pada Ctrl-Alt-AltGr-Kana-Shift-Gray*) maka itu disampaikan pada penekanan tombol yang ditiru. Inilah yang diharapkan oleh aplikasi mana pun - jadi menempelkan apa pun yang hanya berisi karakter tersebut baik-baik saja.
    • Namun, karakter "lainnya" dikirimkan dengan meniru input HEX .

    Kesimpulan : kecuali keyboard Anda mendukung tata letak input BANYAK karakter tanpa kunci awalan, beberapa aplikasi kereta mungkin melewatkan karakter ketika AndaPastemelalui UI Konsol:Alt-Space E P. ( Inilah sebabnya saya sarankan menggunakan tata letak keyboard saya!)

Satu juga harus diingat bahwa "alternatif, 'lebih mampu' konsol" untuk Windows sama sekali bukan konsol . Mereka tidak mendukung Console-I/OAPI, sehingga program yang bergantung pada API ini berfungsi tidak akan berfungsi. (Program yang hanya menggunakan "API File-I / O untuk menangani file konsol" akan berfungsi dengan baik.)

Salah satu contoh non-konsol adalah bagian dari MicroSoft Powershell. Saya tidak menggunakannya; untuk bereksperimen, tekan dan lepaskan WinKey, lalu ketik powershell.


(Di sisi lain, ada program seperti ConEmuatau ANSICONyang mencoba untuk berbuat lebih banyak: mereka "berusaha" untuk mencegat Console-I/OAPI agar aplikasi "true console" juga berfungsi. Ini pasti berfungsi untuk program contoh mainan; dalam kehidupan nyata, ini mungkin atau mungkin tidak menyelesaikan masalah khusus Anda. Eksperimen.)

Ringkasan

  • mengatur font, tata letak keyboard (dan opsional, memungkinkan input HEX).

  • hanya menggunakan program yang melalui Console-I/OAPI, dan menerima argumen baris perintah Unicode. Sebagai contoh, semua cygwinprogram yang dikompilasi harus baik-baik saja. Seperti yang sudah saya katakan, CMDbaik-baik saja.

UPD: Awalnya, untuk bug dalam cp65001, saya mencampur lapisan Kernel dan CRTL ( UPD²: dan API mode pengguna Windows!). Juga: Win8 memperbaiki setengah dari bug ini; Saya mengklarifikasi bagian tentang aplikasi "konsol yang lebih baik", dan menambahkan referensi tentang bagaimana Python melakukannya.

Ilya Zakharevich
sumber
OK, untuk sesuatu yang teliti ini , Anda layak menjadi jawaban yang diterima! Luar biasa!
Vilx-
5
Saya seorang pemula untuk C ++ dan tidak dapat memahami jawaban ini setelah membaca dengan seksama. Adakah yang bisa membantu saya tentang hal ini atau membuat penjelasan yang lebih mudah?
Rick
@Bachi Berkat Bachi, saya menemukan bahwa v73 tata letak keyboard saya (disebutkan di atas) hilang beberapa file dukungan. Sekarang diperbaiki! (Dilihat oleh .logfile saya , ini adalah bug yang berselang di zip -ru[?!]. Tidak punya petunjuk bagaimana men-debug - atau menghindari di masa depan ...)
Ilya Zakharevich
@ Rick: Benar! Saya menambahkan tautan ke solusi di Python (tapi saya tidak dapat menemukan tautan langsung ke tambalan sekarang ...).
Ilya Zakharevich
@IlyaZakharevich: D Terima kasih. Tapi entah bagaimana saya menyerah menggunakan unicode di Windows. Saya akan menggunakan Linux nanti.
Rick
387

Mencoba:

chcp 65001

yang akan mengubah halaman kode menjadi UTF-8. Juga, Anda perlu menggunakan font konsol Lucida.

kgiannakakis
sumber
18
Apakah Anda tahu jika ada cara untuk menjadikan ini default?
AnnanFay
82
Catatan ada bug implementasi serius di halaman kode Windows 65001 dukungan yang akan memecah banyak aplikasi yang bergantung pada metode IO pustaka standar C, jadi ini sangat rapuh. (File batch juga berhenti bekerja di 65001.) Sayangnya UTF-8 adalah warga negara kelas dua di Windows.
bobince
7
@ bobince Apakah Anda memiliki contoh bug di halaman dukungan kode Windows 65001? Saya ingin tahu karena saya tidak pernah bertemu dengannya, dan googling juga tidak mengubah apa pun. (File batch berhenti bekerja, tentu saja, tetapi UTF-8 bukan warga negara kelas dua ...)
Roman Starkov
17
@romkyns: Pemahaman saya adalah bahwa panggilan yang mengembalikan sejumlah byte (seperti fread / fwrite / etc) sebenarnya mengembalikan sejumlah karakter. Ini menyebabkan berbagai gejala, seperti pembacaan input yang tidak lengkap, hang di fflush, file batch yang rusak dan sebagainya. Beberapa latar belakang. Halaman kode default yang digunakan untuk CJK "multibyte" memiliki penanganan khusus bawaan untuk memperbaikinya, tetapi 65001 tidak - itu tidak didukung .
bobince
7
Pertanyaan yang menarik di sini - apakah bug karena bug itu seharusnya melaporkan byte dan bukannya melaporkan karakter - atau karena aplikasi yang menggunakannya mengasumsikan byte = karakter salah? Dengan kata lain, apakah API gagal atau penggunaan API gagal?
Dasar
36

Saya memiliki masalah yang sama (saya dari Republik Ceko). Saya memiliki instalasi Windows dalam Bahasa Inggris, dan saya harus bekerja dengan file pada drive bersama. Jalur ke file termasuk karakter khusus-Ceko.

Solusi yang bekerja untuk saya adalah:

Dalam file batch, ubah halaman charset

File kumpulan saya:

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

File batch harus disimpan dalam CP 1250.

Perhatikan bahwa konsol tidak akan menampilkan karakter dengan benar, tetapi akan memahaminya ...

vanna
sumber
1
Bersulang! Saya membutuhkan ini sehingga saya bisa memasukkan karakter hak cipta dalam file batch saya.
Lea Hayes
Ini bekerja dengan baik untuk saya juga dalam situasi yang hampir sama dengan Anda. Sebaliknya jalanku terkandung karakter Gaelic Irlandia yaitu á, é, í, ó, dan ú.
Seany84
@vanna yang memecahkan "karakter Turki dan spasi di jalur masalah jaringan". kamu hebat.
caglaror
2
Anda mungkin hanya perlu menggunakan font yang berbeda untuk juga menampilkan karakter dengan benar, Lucida Console bekerja untuk saya.
Vlastimil Ovčáčík
29

Periksa bahasa untuk program non-Unicode. Jika Anda memiliki masalah dengan bahasa Rusia di konsol Windows, maka Anda harus mengatur bahasa Rusia di sini:

Mengubah bahasa untuk program non-Unicode

Maxim Yefremov
sumber
6
Itu tidak mengaktifkan dukungan untuk Unicode di cmd, itu hanya beralih codepage default cp866yang masih set karakter 8-bit. Itu bahkan menggunakan cp866bukannya cp1251menambahkan shitload masalah sendiri.
ivan_pozdeev
1
Lihat juga saya jawab di bawah ini untuk opsi baru di versi Windows 10 yang lebih baru
zvi
14

Cukup sulit untuk mengubah Codepage default dari konsol Windows. Ketika Anda mencari di web Anda menemukan proposal yang berbeda, namun beberapa dari mereka mungkin merusak Windows Anda sepenuhnya, yaitu PC Anda tidak bisa boot lagi.

Solusi paling aman adalah yang ini: Buka kunci Registry Anda HKEY_CURRENT_USER\Software\Microsoft\Command Processordan tambahkan nilai String Autorun= chcp 65001.

Atau Anda dapat menggunakan Batch-Script kecil ini untuk halaman kode yang paling umum.

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

Menggunakan @chcp 65001>nulalih-alih chcp 65001menekan output "Halaman kode aktif: 65001" Anda akan mendapatkan setiap kali Anda memulai jendela baris perintah baru.

Daftar lengkap semua nomor yang tersedia yang bisa Anda dapatkan dari Pengidentifikasi Halaman Kode

Catatan, pengaturan hanya akan berlaku untuk pengguna saat ini. Jika Anda ingin mengaturnya untuk semua pengguna, ganti baris SET ROOT_KEY="HKEY_CURRENT_USER"denganSET ROOT_KEY="HKEY_LOCAL_MACHINE"

Wernfried Domscheit
sumber
ide bagus dan contoh yang dapat digunakan juga!
13

Sebenarnya, triknya adalah prompt perintah benar-benar memahami karakter non-Inggris ini, tidak dapat menampilkannya dengan benar.

Ketika saya memasukkan lintasan di command prompt yang berisi beberapa pemburu non-Inggris itu ditampilkan sebagai "?? ?????? ?????". Ketika Anda mengirimkan perintah Anda (cd "??? ?????? ?????" dalam kasus saya), semuanya berfungsi seperti yang diharapkan.

Pengguna
sumber
2
Ini mungkin agak berbahaya karena Anda bisa mendapatkan konflik penamaan. mis., jika Anda memiliki dua file yang menjadikan "???", dan Anda memasukkan "cd ???" tidak akan tahu mana yang digunakan (atau lebih buruk akan memilih yang sewenang-wenang).
John
26
Anda tidak memasukkan ???, Anda memasukkan nama asli itu hanya ditampilkan sebagai ???. Anggap saja sebagai kotak input kata sandi. Apa pun yang Anda masukkan ditampilkan sebagai ***, tetapi dikirim adalah teks asli.
Pengguna
Ini memang bekerja untuk perintah yang dijalankan langsung di command prompt. Namun, dengan menjalankan .cmdfile batch, saya masih harus meletakkan chcp 65001di bagian atas file batch.
wisbucky
Dalam kasus Anda, ini adalah masalah font ... isinya ada, tidak ada font yang tepat untuk menampilkannya Tetapi OP berbeda.
WesternGun
11

Pada mesin Windows 10 x64, saya membuat command prompt menampilkan karakter non-Inggris dengan:

Buka prompt perintah yang ditinggikan (jalankan CMD.EXE sebagai administrator). Permintaan registri Anda untuk font TrueType yang tersedia untuk konsol dengan:

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

Anda akan melihat output seperti:

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

Sekarang kita perlu menambahkan font TrueType yang mendukung karakter yang Anda butuhkan seperti Courier New. Kami melakukan ini dengan menambahkan nol ke nama string, jadi dalam kasus ini yang berikutnya adalah "000":

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

Sekarang kami menerapkan dukungan UTF-8:

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

Setel font default ke "Courier New":

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

Atur ukuran font menjadi 20:

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

Aktifkan pengeditan cepat jika Anda suka:

    REG ADD HKCU\Console /v QuickEdit /t REG_DWORD /d 1 /f
Alon Atau
sumber
3
Secara umum menggunakan codepage 65001 hanya akan berfungsi tanpa bug di Windows 10 dengan pembaruan Creators. Pada Windows 7 ini akan memiliki bug output dan input. Di Windows 8 dan versi Windows 10 yang lebih lama, ia hanya memiliki bug input, yang membatasi input ke ASCII 7-bit.
Eryk Sun
6

Karena saya belum melihat jawaban lengkap untuk Python 2.7, saya akan menguraikan dua langkah penting dan langkah opsional yang cukup berguna.

  1. Anda memerlukan font dengan dukungan Unicode. Windows dilengkapi dengan Lucida Console yang dapat dipilih dengan mengklik kanan bilah judul command prompt dan mengklik Defaultsopsi. Ini juga memberikan akses ke warna. Perhatikan bahwa Anda juga dapat mengubah pengaturan untuk jendela perintah yang dipanggil dengan cara tertentu (misalnya, buka di sini, Visual Studio) dengan memilihProperties sebagai gantinya.
  2. Anda perlu mengatur halaman kode cp65001, yang tampaknya merupakan upaya Microsoft untuk menawarkan dukungan UTF-7 dan UTF-8 ke command prompt. Lakukan ini dengan menjalankan chcp 65001command prompt . Setelah diatur, tetap seperti ini sampai jendela ditutup. Anda harus mengulang ini setiap kali Anda meluncurkan cmd.exe.

Untuk solusi yang lebih permanen, lihat jawaban ini pada Pengguna Super. Singkatnya, buat REG_SZentri (String) menggunakan regedit at HKEY_LOCAL_MACHINE\Software\Microsoft\Command Processordan beri nama AutoRun. Ubah nilainya menjadi chcp 65001. Jika Anda tidak ingin melihat pesan output dari perintah, gunakan @chcp 65001>nulsaja.

Beberapa program mengalami kesulitan berinteraksi dengan pengkodean ini, MinGW menjadi yang terkenal yang gagal saat kompilasi dengan pesan kesalahan yang tidak masuk akal. Meskipun demikian, ini bekerja dengan sangat baik dan tidak menyebabkan bug pada sebagian besar program.

Aaron3468
sumber
5

Saya menemukan metode ini bermanfaat dalam versi baru Windows 10:

Aktifkan fitur ini: "Beta: Gunakan Unicode UTF-8 untuk dukungan bahasa di seluruh dunia"

Panel kontrol -> Pengaturan regional -> tab Administratif-> Ubah lokasi sistem ...

Pengaturan Wilayah

zvi
sumber
Bagaimana mencapai ini dengan menggunakan PowerShell atau CMD?
Corey
Saya mencoba untuk menampilkan karakter Cina di konsol dan melakukan ini tidak berhasil pada Windows 10 64-bit (Diinstal dalam bahasa Turki dan kemudian diubah ke bahasa Inggris). Selanjutnya, saya akan mencoba menginstal bahasa Mandarin dan melihat apakah itu berfungsi.
akinuri
4

Salah satu opsi yang sangat sederhana adalah menginstal bash shell Windows seperti MinGW dan menggunakannya:

Masukkan deskripsi gambar di sini

Ada sedikit kurva pembelajaran karena Anda harus menggunakan fungsionalitas baris perintah Unix, tetapi Anda akan menyukai kekuatannya dan Anda dapat mengatur karakter konsol yang diatur ke UTF-8.

Masukkan deskripsi gambar di sini

Tentu saja Anda juga mendapatkan semua barang * nix biasa seperti grep, find, less, etc.

Steve Barnes
sumber
Dalam kasus (lama) ini, masalahnya adalah skrip dan bukan konsol. Apakah menggunakan skrip bash menyelesaikan ini?
Vilx-
Ya memang mereka skrip kayu bash dapat ditandai sebagai UTF-8 dan hanya bekerja dengan kekuatan lebih dari file batch windows - Saya tahu bahwa itu adalah kasus lama tetapi berpikir opsi itu layak ditandai untuk referensi di masa depan karena MS sepertinya tidak menjadi jauh lebih baik di Unicode.
Steve Barnes
grep , temukan , dan kurang .
Peter Mortensen
Mengeluarkan karakter berkode UTF-8 baik-baik saja. Tetapi input masih dikodekan oleh sistem codepage.
Rick
1
Hanya untuk menambahkan bahwa pengguna Windows mungkin sudah memiliki bash shell jika Anda menggunakan Git: cukup buka jendela Git> Git Bash .
skomisa
3

Untuk masalah yang sama, (masalah saya adalah menampilkan karakter UTF-8 dari MySQL pada prompt perintah),

Saya menyelesaikannya seperti ini:

  1. Saya mengubah font command prompt ke Lucida Console. (Langkah ini pasti tidak relevan dengan situasi Anda. Ini hanya ada hubungannya dengan apa yang Anda lihat di layar dan bukan dengan karakter yang sebenarnya).

  2. Saya mengubah codepage ke Windows-1253. Anda melakukan ini pada command prompt dengan "chcp 1253". Ini berhasil untuk kasus saya di mana saya ingin melihat UTF-8.

Christoforos
sumber
7
Windws-1253 bukan codepage Unicode. Ini adalah codepage 256 karakter standar. Tampaknya Anda hanya menggunakan karakter yang dapat ditampilkan dalam codepage itu, tetapi tidak akan bersifat universal.
Vilx-
3

Masalah ini cukup mengganggu. Saya biasanya memiliki karakter Cina di nama file dan konten file saya. Harap dicatat bahwa saya menggunakan Windows 10, berikut ini solusinya:

Untuk menampilkan nama file , seperti diratau lsjika Anda menginstal Ubuntu bash di Windows 10

  1. Atur wilayah untuk mendukung 8 karakter non-utf.

  2. Setelah itu, font konsol akan diubah menjadi font lokal itu, dan itu juga mengubah pengkodean konsol.

Setelah Anda melakukan langkah-langkah sebelumnya, untuk menampilkan konten file dari file UTF-8 menggunakan alat baris perintah

  1. Ubah halaman menjadi utf-8 oleh chcp 65001
  2. Ubah ke font yang mendukung utf-8, seperti Lucida Console
  3. Gunakan typeperintah untuk mengintip konten file, ataucat jika Anda menginstal Ubuntu bash di Windows 10
  4. Harap dicatat bahwa, setelah mengatur pengkodean konsol ke utf-8, saya tidak bisa mengetik karakter Cina di cmd menggunakan metode input Cina.

Solusi paling malas: Cukup gunakan emulator konsol seperti http://cmder.net/

code4j
sumber
Ini bukan untuk saya. Karakter Cina dalam output pointperintah masih kacau.
Ssuching Yu
@ SiqingYu Saya menyerah pengaturan gila. Cukup gunakan blog.miniasp.com/post/2015/09/27/Useful-tool-Cmder.aspx
code4j
Saya menggunakan Cmder sebelumnya, tetapi tidak dapat menggantikan konsol pengembang yang digunakan oleh Visual Studio.
Ssuching Yu
@ SiqingYu Maksudmu c # interactive powershell?
code4j
Bukan shell daya interaktif, tetapi konsol pengembang, yang digunakan oleh Visual C ++ juga. Ini adalah konsol debug default di proyek Aplikasi Win32 Console.
Ssuching Yu
2

Saya melihat beberapa jawaban di sini, tetapi mereka sepertinya tidak menjawab pertanyaan - pengguna ingin mendapatkan input Unicode dari baris perintah.

Windows menggunakan UTF-16 untuk penyandian dalam dua byte string, jadi Anda harus mendapatkannya dari OS di program Anda. Ada dua cara untuk melakukan ini -

1) Microsoft memiliki ekstensi yang memungkinkan utama untuk mengambil array karakter lebar: int wmain (int argc, wchar_t * argv []); https://msdn.microsoft.com/en-us/library/6wd819wh.aspx

2) Panggil windows api untuk mendapatkan versi unicode dari baris perintah wchar_t win_argv = (wchar_t ) CommandLineToArgvW (GetCommandLineW (), & nargs); https://docs.microsoft.com/en-us/windows/desktop/api/shellapi/nf-shellapi-commandlinetoargvw

Baca ini: http://utf8everywhere.org untuk info terperinci, terutama jika Anda mendukung sistem operasi lain.

Robert Boehne
sumber
Ahh, tidak, maaf, tapi kamu melewatkan pertanyaan itu. Ini untuk ketika saya sedang menulis sebuah program yang akan menerima karakter unicode. Pertanyaan saya adalah tentang mengirim karakter unicode ke program lain (yang diharapkan mendukung penerimaan mereka, tapi saya benar-benar tidak punya cara untuk mengetahui kecuali pembongkaran).
Vilx-
2

Mulai Juni 2019, dengan Windows 10, Anda tidak perlu mengubah codepage.

Lihat " Memperkenalkan Terminal Windows " (dari Kayla Cinnamon ) dan Microsoft / Terminal .
Melalui penggunaan font Consolas, sebagian dukungan Unicode akan diberikan.

Seperti yang didokumentasikan dalam Microsoft/Terminaledisi 387 :

Ada 87.887 ideograf saat ini dalam Unicode. Anda membutuhkan semuanya juga?
Kita membutuhkan batas, dan karakter di luar batas itu harus ditangani oleh font fallback / penautan font / apa pun.

Apa yang harus dicakup Consolas:

  • Karakter yang digunakan sebagai simbol yang digunakan oleh program OSS modern di CLI.
  • Karakter-karakter ini harus mengikuti desain dan metrik Consolas, dan selaras dengan karakter Consolas yang ada.

Apa yang seharusnya tidak ditanggung Consolas:

  • Karakter dan tanda baca skrip yang melampaui bahasa Latin, Yunani, dan Sirilik, terutama karakter memerlukan pembentukan kompleks (seperti bahasa Arab).
  • Karakter-karakter ini harus ditangani dengan font fallback.
VONC
sumber
1

Keputusan cepat untuk file .bat jika komputer Anda menampilkan path / nama file Anda dengan benar ketika Anda mengetikkannya di jendela DOS:

  1. salin con temp.txt [tekan Enter]
  2. Ketikkan path / nama file [tekan Enter]
  3. Tekan Ctrl-Z [tekan Enter]

Dengan cara ini Anda membuat file .txt - temp.txt. Buka di Notepad, salin teks (jangan khawatir itu akan terlihat tidak dapat dibaca) dan tempel di file .bat Anda. Mengeksekusi .bat yang dibuat dengan cara ini di DOS-window bekerja untuk saya (Cyrillic, Bulgarian).

S. Hristov
sumber
1

Hal bersih yang lebih baik untuk dilakukan: Instal saja paket bahasa Jepang Microsoft yang tersedia dan gratis. (Paket bahasa oriental lainnya juga akan berfungsi, tetapi saya telah menguji yang Jepang.)

Ini memberi Anda font dengan set mesin terbang yang lebih besar, menjadikannya perilaku default, mengubah berbagai alat Windows seperti cmd, WordPad, dll.

Mike Beckerle
sumber
1

Mengubah halaman kode ke 1252 bekerja untuk saya. Masalahnya bagi saya adalah simbol double doller § mengkonversi ke simbol lain oleh DOS pada Windows Server 2008.

Saya telah menggunakan CHCP 1252 dan tutupnya sebelumnya dalam pernyataan BCP saya ^ §.

madhav bitra
sumber
Terima kasih itu berhasil! Saya tidak tahu mengapa orang menolak ini, ini merupakan alternatif yang valid untuk sebagian orang .. Codepage 1252 ini juga memperbaiki masalah pada Windows Server 2012, di mana kode yang sama dengan CP 65001 tidak bekerja untuk saya. Saya kira itu tergantung pada codepage apa script batch diedit dengan, atau standar OS. Dalam hal ini dibuat dengan Notepad pada mesin MUI Jerman dengan basis OS en-US ..
Tony Wall
0

Saya mengatasi masalah yang sama menghapus file yang dinamai Unicode dengan merujuknya dalam file batch dengan nama pendek mereka (8 titik 3).

Nama-nama pendek dapat dilihat dengan melakukan dir /x. Jelas, ini hanya bekerja dengan nama file Unicode yang sudah dikenal.

Michael
sumber