2013-03-04 21 views
5

UTF-8'de F0 A4 AD A2 olarak sunulan Çince bir karakter var. Bu karakter burada tarif edilir: http://en.wikipedia.org/wiki/UTF-8C#: bayttan UTF-8 dize dönüşümü. Neden çalışmıyor?

U + 24B62 F0 A4 AD A2

Ben C# bu kodu çalıştırdığınızda ...

byte[] data = { 0xF0, 0xA4, 0xAD, 0xA2 }; 
string abc = Encoding.UTF8.GetString(data); 
Console.WriteLine("Test: description = {0}", abc); 

... Ben çıktısını yönlendirmek metin dosyası ve sonra UTF-8 kodlamasını seçerek notepad.exe ile açın. Çıktının içine girmeyi bekliyorum, ama iki soru işareti (??) aldım.

Bayt dizisi doğru. Benim soru yani ben

olsun, çıktısında

print "\xF0\xA4\xAD\xA2"; 

: Bu Perl içinde çalışır ben alırım niçin "??" C# yerine "" yerine?

P.S. Bu karakterde özel bir şey yok: Ben de herhangi bir karakter için aynı şeyi aldım (2, 3 veya 4 bayt uzunluğunda).

+2

, "çıktıda" tarafından size bir metin dosyasına çıktı yönlendirmek ve Not Defteri ile açın anlama geliyor? – yoozer8

+0

UTF8 kodlamasını kullanarak dosyaya yazdığınızdan emin olmanız gerekir. Yazmaya kod yazabilir misin? –

+0

Dosyaları kullanmamanın belirli bir nedeni var mı? Konsol ve Unicode ile uğraşmak biraz acı verici. Oleksandr Pshenychnyy cevap (+1) bu durumda size yardımcı olabilir ... –

cevap

3

dosyaya yazmak için daha iyi olurdu. Aşağıdaki kod, bunu nasıl yapabileceğinizi gösterir. Not Defteri'nde çıkan dosyayı açarken, karakter doğru gösterilmiştir: Perl durumda

string c = ""; 
var bytes = Encoding.UTF8.GetBytes(c); 
var cBack = Encoding.UTF8.GetString(bytes); 
using (var writer = new StreamWriter(@"c:\temp\char.txt", false, Encoding.UTF8)) 
{ 
    writer.WriteLine(cBack); 
} 
+0

Jakob, teşekkürler, yardımcı oldu! – Racoon

+0

@Racoon: Sevindim :-) Yardımcı olabilirim –

+0

Konsol ile bunu nasıl yapabilirim? – Paul

13

Konsol, varsayılan olarak Unicode karakterlerini görüntüleyemiyor. Sadece ASCII görüntüler. Unicode'u görüntülemek için, yazmadan önce aşağıdakileri kullanın:

Console.OutputEncoding = System.Text.Encoding.Unicode 

.

Ancak, Windows Komut satırı Unicode'un kendisini desteklemediğinden, çoğu OS'da başarısız olacaktır ancak yine de .

Yani, test amaçlıdır çıkış Sen UTF8 bir dosyaya yazmak gerekir

+0

Kodlamayı bir konsol uygulamasında ayarlamak mümkün ise, bir komut istemi başlatıldığında Kodlamayı ayarlamak mümkün olmalıdır. Buna katılmıyorum ki, çıktı tabiki bir dosyaya yönlendirilmelidir. –

+1

Bu komut bir istisna oluşturur: Genel Özel Durum İşleyici: System.IO.IOException: Parametre yanlış. System.IO .__ Error.WinIOError (ınt32 errorCode, dize maybeFullPath) tpam_multibyte.Program.Main de System.IO .__ Error.WinIOError() System.Console.set_OutputEncoding (Kodlama değeri) de de String (en [] args) – Racoon

+0

Dediğim gibi, Windows konsolunda (en az Windows 7'ye kadar) başarısız olur, çünkü Windows konsolu unicode'u desteklemez. Bu yüzden, –

İlgili konular