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 ?
Jawaban:
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:
CMD
dan "konsol" adalah faktor yang tidak terkait.CMD.exe
adalah salah satu dari program yang siap untuk "bekerja di dalam" konsol ("aplikasi konsol").CMD
memiliki dukungan sempurna untuk Unicode; Anda dapat memasukkan / mengeluarkan semua karakter Unicode saat codepage apa pun aktif.chcp 65001
sangat 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 dengancp65001
, tetapi sisanya masih berlaku untuk Win10 .cp1252
. Seperti yang sudah saya katakan: Untuk input / output Unicode di konsol, orang tidak perlu mengatur codepage .Rinciannya
File-I/O
API, tetapiConsole-I/O
API. (Sebagai contoh, lihat bagaimana Python melakukannya .)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:
Satu lagi gotcha dengan "Tempel" ke dalam aplikasi konsol (sangat teknis):
KeyUp
dariAlt
; semua cara lain untuk memberikan karakter terjadi padaKeyDown
; begitu banyak aplikasi tidak siap untuk melihat karakter aktifKeyUp
. (Hanya berlaku untuk aplikasi yang menggunakanConsole-I/O
API.)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.Kesimpulan : kecuali keyboard Anda mendukung tata letak input BANYAK karakter tanpa kunci awalan, beberapa aplikasi kereta mungkin melewatkan karakter ketika Anda
Paste
melalui 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/O
API, 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 lepaskanWinKey
, lalu ketikpowershell
.(Di sisi lain, ada program seperti
ConEmu
atauANSICON
yang mencoba untuk berbuat lebih banyak: mereka "berusaha" untuk mencegatConsole-I/O
API 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/O
API, dan menerima argumen baris perintah Unicode. Sebagai contoh, semuacygwin
program yang dikompilasi harus baik-baik saja. Seperti yang sudah saya katakan,CMD
baik-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.sumber
.log
file saya , ini adalah bug yang berselang dizip -ru
[?!]. Tidak punya petunjuk bagaimana men-debug - atau menghindari di masa depan ...)Mencoba:
yang akan mengubah halaman kode menjadi UTF-8. Juga, Anda perlu menggunakan font konsol Lucida.
sumber
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:
File batch harus disimpan dalam CP 1250.
Perhatikan bahwa konsol tidak akan menampilkan karakter dengan benar, tetapi akan memahaminya ...
sumber
á
,é
,í
,ó
, danú
.Periksa bahasa untuk program non-Unicode. Jika Anda memiliki masalah dengan bahasa Rusia di konsol Windows, maka Anda harus mengatur bahasa Rusia di sini:
sumber
cmd
, itu hanya beralih codepage defaultcp866
yang masih set karakter 8-bit. Itu bahkan menggunakancp866
bukannyacp1251
menambahkan shitload masalah sendiri.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 Processor
dan tambahkan nilai StringAutorun
=chcp 65001
.Atau Anda dapat menggunakan Batch-Script kecil ini untuk halaman kode yang paling umum.
Menggunakan
@chcp 65001>nul
alih-alihchcp 65001
menekan 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"
sumber
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.
sumber
.cmd
file batch, saya masih harus meletakkanchcp 65001
di bagian atas file batch.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:
Anda akan melihat output seperti:
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":
Sekarang kami menerapkan dukungan UTF-8:
Setel font default ke "Courier New":
Atur ukuran font menjadi 20:
Aktifkan pengeditan cepat jika Anda suka:
sumber
Karena saya belum melihat jawaban lengkap untuk Python 2.7, saya akan menguraikan dua langkah penting dan langkah opsional yang cukup berguna.
Defaults
opsi. 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.cp65001
, yang tampaknya merupakan upaya Microsoft untuk menawarkan dukungan UTF-7 dan UTF-8 ke command prompt. Lakukan ini dengan menjalankanchcp 65001
command 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_SZ
entri (String) menggunakan regedit atHKEY_LOCAL_MACHINE\Software\Microsoft\Command Processor
dan beri namaAutoRun
. Ubah nilainya menjadichcp 65001
. Jika Anda tidak ingin melihat pesan output dari perintah, gunakan@chcp 65001>nul
saja.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.
sumber
Saya menemukan metode ini bermanfaat dalam versi baru Windows 10:
Aktifkan fitur ini: "Beta: Gunakan Unicode UTF-8 untuk dukungan bahasa di seluruh dunia"
sumber
Salah satu opsi yang sangat sederhana adalah menginstal bash shell Windows seperti MinGW dan menggunakannya:
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.
Tentu saja Anda juga mendapatkan semua barang * nix biasa seperti grep, find, less, etc.
sumber
Untuk masalah yang sama, (masalah saya adalah menampilkan karakter UTF-8 dari MySQL pada prompt perintah),
Saya menyelesaikannya seperti ini:
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).
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.
sumber
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
dir
atauls
jika Anda menginstal Ubuntu bash di Windows 10Atur wilayah untuk mendukung 8 karakter non-utf.
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
chcp 65001
type
perintah untuk mengintip konten file, ataucat
jika Anda menginstal Ubuntu bash di Windows 10Solusi paling malas: Cukup gunakan emulator konsol seperti http://cmder.net/
sumber
point
perintah masih kacau.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.
sumber
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/Terminal
edisi 387 :sumber
Keputusan cepat untuk file .bat jika komputer Anda menampilkan path / nama file Anda dengan benar ketika Anda mengetikkannya di jendela DOS:
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).
sumber
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.
sumber
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 ^ §.
sumber
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.sumber