2010-08-26 11 views
5

Haydi rastgele bir Çince karakterim var diyelim, 玩. U + 73A9 olan Unicode'a dönüştürmek istiyorum. Bunu C# nasıl yapabilirim?Çince karakterleri Unicode'a dönüştürme

+3

Bu Çince karakter nereden geliyor? Klavye Girişi? Diskteki bir dosyadan mı? Bu dosyada hangi kod sayfası veya kodlama kullanılıyor? (Basitleştirilmiş Çince, Çince Geleneksel veya ??) Başka bir kodlamaya anlamlı bir şekilde dönüştürebilmek için, giriş baytlarında hangi kodlamanın kullanıldığını bilmeniz gerekir. – dthorpe

+0

Klavye girişi, UTF kullanarak (16 sanırım, karakterlerin çoğuna sahip olmalı), Basitleştirilmiş veya geleneksel. – Mass

cevap

5

Console.WriteLine("{0} U+{1:x4} {2}", myChar, (int)myChar, (int)myChar); 

... senin özel karakteri başvuran bir char olarak MyChar atın.

... çıkış sadece "U + ..." kod için biçim dizesi ve parametreleri azaltın

Console.WriteLine("U+{0:x4}", (int)myChar); 
+0

gibi bir şey istiyorum Teşekkürler, bu harika! Kodu bana açıklar mısın? Anladığım kadarıyla sadece U + yazıyorsunuz, ama {0: x4} 'nedir? Bunlardan birinin bir miktar belirleyici olduğunu biliyorum, yani: x4' nedir? – Mass

+2

'x4', onaltılık (x), solda 4 basamaklı sıfır yastıklı olarak çıkar. – Chris

+0

Teşekkürler! (15 karakter ...) – Mass

2

Karakterler Un Unicode'dadır.

Eğer C# olarak var ise, o zaman şu anda Unicode kodlama formlarından biri olan UTF-16'da.

sen başka yerden elde ediyorsanız yapmanız gerekir:

  1. içinde bulunduğu kodlamayı bulun
  2. (bir dere güzel tarafından sarılmış) bayt alın..
  3. Uygun bir Encoder yazınız.
  4. Dize almak için kodlayıcıyı kullanın (güzel akışları bir textreader ile daha güzel sarma).

Adım 3 (kendim yazmak zorunda, lanetlemek!) Basit (ah, sadece o birini kullanın!) Veya sert olabilir ya da ikisinin arasında (hey, herkes zaten bunlardan birini yazılı ?!)

biz Unicode kod noktası izledi karakteri kendisi ve sonra tamsayı değeri çıktılıyorsanız Üstü
+0

Demek istediğim karakteri U + 73A9 – Mass

+0

char c = '\ u73a9' olarak değiştirmek istiyorum; –

+0

@ Greg- teşekkürler, ama bunu başka yoldan istiyorum. Ben something -> \ u73a9 – Mass

0

Jon Hanna'nın yanıtında bir yol izler Biraz daha uzun bir örnek:

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 

namespace UnicodeDecodeConsoleApplication 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      char c = '\u73a9'; 
      char[] chars = {c}; 
      Encoding encoding = Encoding.BigEndianUnicode; 
      byte[] decodeds = encoding.GetBytes(chars); 
      StringBuilder stringBuilder = new StringBuilder("U+"); 
      foreach (byte decoded in decodeds) 
      { 
       stringBuilder.Append(decoded.ToString("x2")); 
      } 
      Console.WriteLine(stringBuilder); 
      Console.ReadLine(); 
     } 
    } 
} 

--jeroen

İlgili konular