Cmd.exe dosyasında UTF-16 dosya çıktısı


1
chcp 10000
echo hell☺ w☻rld♥! >> "UTF-16 file☺☻♥♦♣♠"

Tamam, doğru dosya oluşturur, ancak içerikte unicode karakterler yerine soru işaretleri vardır. Nasıl düzeltilir?

Yanıtlar:


1

Kodunuz doğru değil, çünkü 10000 bir Unicode kod sayfası değil. Görmek Kod Sayfa Tanımlayıcıları .

10000   macintosh   MAC Roman; Western European (Mac)
...
1200    utf-16      Unicode UTF-16, little endian byte order (BMP of ISO 10646); available only to managed applications
1201    unicodeFFFE Unicode UTF-16, big endian byte order; available only to managed applications
...
12000   utf-32      Unicode UTF-32, little endian byte order; available only to managed applications
12001   utf-32BE    Unicode UTF-32, big endian byte order; available only to managed applications
...
65000   utf-7       Unicode (UTF-7)
65001   utf-8       Unicode (UTF-8)

Neden olduğundan emin değilim, ancak Komut İstemi bunları yapıştırıldığında kontrol karakterleri olarak yorumluyor, özellikle SOH (Başlık Başlığı, 01), STX (Metin Başlangıcı, 02) ve ETX (Metin Sonu, 03).

Artı tarafta, PowerShell bunu doğru bir şekilde ele alıyor gibi görünüyor. Notepad ++, ortaya çıkan metin dosyasını otomatik olarak "UCS-2 Little Endian" olarak açtı ve doğru karakterleri görüntüler.


Tamam, UTF-8'in neden benim için çalışmadığını anladım. Varsayılan Raster Yazı Tipleri Unicode desteği içermediğinden yazı tipi Lucida Konsoluna ayarlanmalıdır.


1
chcp 1200: konsol diyor ki: "geçersiz kod sayfası", yanı sıra chcp 1201 ile eşek.
0x6B6F77616C74

1
@kutacz available only to managed applications. UTF-8 seçeneğinden bu yana, uygun Unicode desteği için PowerShell kullanın ( 65001 ) bu dava için Komut İstemi'nde görünmüyor.
Bob

UTF-8 durumunda (chcp 65001’den sonra) iyi çalışıyor ...
0x6B6F77616C74

@kutacz Peki, UTF-8 kullanın. Benim için işe yaramadı, ama ne yapmaya çalıştığınızdan hala emin değilim. Standart Komut İsteminde UTF-16 mümkün değil. Yönetilen uygulamalar muhtemelen .NET Framework’ü ifade eder. PowerShell, .NET Framework üzerinde çalışır, bu nedenle UTF-16 için çalışır.
Bob

0

Her ikisi de 65001.txt ve 1200.txt aynı dizeyi içerir: абв™ ama farklı kodlamada. Komuta:

chcp 65001 & type 65001.txt 

kod sayfasını başarıyla değiştirdi, ancak çöpü görüntüler.

Komuta:

type 1200.txt

doğru karakterleri görüntüler, ancak komut

for /f %A in ('type 1200.txt') do echo %A

görüntüler абвT.

Bu nedenle cmd.exe, kod sayfası 1200 ile çalışabilir (bazı sınırlarla), kod sayfası 65001 ile tatmin edici bir sonuç alamıyorum.

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.