2011-07-03 14 views
8

Unicode karakterini onaltılık biçeminden tek bir karaktere çeviren bir C# programı oluşturmaya çalışıyorum ve bir sorunum var. Bu işleriOnaltılık unicode karakterini görsel gösterime dönüştürün

: Bu benim kodudur Ancak

char e = Convert.ToChar("\u0066"); 

, bu işe yaramazsa:

String must be exactly one character long

herkes var:

Console.WriteLine("enter unicode format character (for example \\u0066)"); 
string s = Console.ReadLine(); 
Console.WriteLine("you entered (for example f)"); 
char c = Convert.ToChar(s); 

(Convert.ToChar("\\u0066")) Çünkü hata veriyor fikir nasıl yapılır?

cevap

6

int.Parse "\ u" öneki sevmez, ama bunun olmamasını sağlamak için ilk doğrulamak varsa,

char c = (char)int.Parse(s.Substring(2), NumberStyles.HexNumber); 

Bu giriş dizesinden ilk iki karakter şeritler ve kullanabilir kalan metni ayrıştırır. char.parse hala sadece tek bir karakteri kabul edecek, çünkü ne o işin

Regex reg = new Regex(@"^\\u([0-9A-Fa-f]{4})$"); 
if(reg.IsMatch(s)) 
{ 
    char c = (char)int.Parse(s.Substring(2), NumberStyles.HexNumber); 
} 
else 
{ 
    // Error 
} 
+2

Bu da öyle değil. Her ikisi de geçerli unicode karakter sabitleri olmayan '\ u a' ve '\ u1234567890' ayrıştırmalarına izin verir. –

+2

Aslında, ilk önce giriş değerini doğrulamaya gerek vardır. –

+0

@Steve: Yes !!!! Çok teşekkür ederim!! Aslında, ilk iki karakteri doğrulamak benim için yeterli olacaktır, çünkü eğer diziyle başlıyorsa, uygun olmayan sekansları daha erken yakaladığımdan beri uygun onaltılık sıraya sahip olmalıdır. Eğer değil yakalama grubu kullanmak neden regex kullanarak (yerine sonuna kadar olan alt ve bina henüz başka dize çağırarak) onaltılık basamak yakalanan yana Sen benim gün :) – vldmrrdjcc

-1
Convert.ToChar("\u0066"); 

Derleyici, ters eğik çizgi dizisini işlediği için, çalışma zamanında tek karakterli bir dizedir.

Kodunuzun geri kalanı,numaralı altı karakter dizesiyle ilgilidir; bu Convert.ToChar'un üstesinden gelemez.

char.Parse (veya muhtemelen Int16.Parse(s, NumberStyles.AllowHexSpecifier) ve onu izleyen char).

+0

ve Int16.Parse bir desteklemez:

dizisi geçerli olmasını sağlamak amacıyla, bu deneyin unicode belirteci. –

+0

@Steve: Normal bir ifade veya benzer kullanarak dize üzerindeki onaltılık basamakları çıkarmanız gerekir. –

İlgili konular