2009-01-07 24 views
6

:konsol kodlama olarak Unicode ayarlanırken "parametresi yanlış" aşağıdaki hatayı alıyorum

Unhandled Exception: System.IO.IOException: The parameter is incorrect. 
at System.IO.__Error.WinIOError(Int32 errorCode, String maybeFullPath) 
at System.IO.__Error.WinIOError() 
at System.Console.set_OutputEncoding(Encoding value) 
at (my program) 

ben aşağıdaki kod satırını çalıştırdığınızda:

Console.OutputEncoding = Encoding.Unicode; 

neden bir fikrin? Kodlamayı UTF8 yerine ayarladığımda bu hatayı alamıyorum.

cevap

3

Encoding.Unicode, tüm karakterleri kodlamak için 2 bayt kullanan UTF-16'dır. ASCII karakterleri (ingilizce karakterleri) UTF-8'de aynıdır (tek bayt, aynı değerler), bu nedenle çalışmasının nedeni bu olabilir.

Tahminimce, Windows Komutu Kabuğu, Unicode'u tam olarak desteklemiyor. Powershell 2 GUI'nin UTF-16'yı (bildiğim kadarıyla) desteklediğini fakat programın orada aynı istisnayı fırlattığını göreceksiniz.

Aşağıdaki kod Konsol nesne çıkış yönlendirildi ve destek Encoding.Unicode olduğunu gösteren çalışır:

FileStream testStream = File.Create("test.txt"); 
TextWriter writer = new StreamWriter(testStream, Encoding.Unicode); 
Console.SetOut(writer);    
Console.WriteLine("Hello World: \u263B"); // unicode smiley face 
writer.Close(); // flush the output 
0

Kullanmakta olduğunuz Encoding ürününün CodePage ile ilgili olduğunu düşünüyorum. Özellikle bkz. SetConsoleOutputCP Function. Daha fazla bilmiyorum, üzgünüm.

Düzenleme: SetConsoleOutputCP numaralı başvuruyu bildirdim çünkü bu işlev dahili olarak (PInvoke aracılığıyla) Console.OutputEncoding (set işlemi) tarafından çağrıldı.

1

Code Page Identifiers on MSDN listesine göre, UTF-16 ve UTF-32 kodlamaları yönetilir -sadece:

örneğin
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 

, onlar Kontrol \ Nls \ CodePage \ CurrentControlSet \ HKEY_LOCAL_MACHINE \ SYSTEM altında diğer sistem kod sayfaları ile kayıt listesinde adınız yok.

İlgili konular