2010-08-26 19 views
5

Diciamo che ho un carattere cinese casuale, 玩. Voglio convertirlo in Unicode, che sarebbe U + 73A9. Come potrei farlo in C#?Conversione di caratteri cinesi in Unicode

+3

Da dove viene questo carattere cinese? Input della tastiera? Da un file su disco? Quale codepage o codifica viene utilizzata in quel file? (Cinese semplificato, cinese tradizionale o ??) È necessario sapere quale codifica viene utilizzata nei byte di input prima di poter essere convertita in modo significativo in un'altra codifica. – dthorpe

+0

Ingresso tastiera, utilizzando UTF (16 Immagino che dovrebbe avere la maggior parte dei caratteri), semplificato o tradizionale. – Mass

risposta

5

Prendere MyChar come char referenziare la tua carattere speciale ...

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

Sopra stiamo producendo il carattere stesso seguito dal punto di codice Unicode e quindi il valore intero.

Ridurre la stringa di formato e parametri di uscita solo la "U + ..." codice ...

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

Grazie, è fantastico! Potresti spiegarmi il codice? Capisco che tu stia solo scrivendo l'U +, ma cosa è '{0: x4}'? So che uno di loro è un identificatore, quindi cos'è ': x4'? – Mass

+2

Il 'x4' lo emette come esadecimale (x), a 4 cifre zero imbottite a sinistra. – Chris

+0

Grazie! (15 caratteri ...) – Mass

2

Il characater 玩 è in Unicode.

Se lo si ha in C# come 玩, è attualmente in UTF-16, che è uno dei moduli di codifica Unicode.

Se si sta ottenendo da qualche altra parte è necessario:

  1. Trova la codifica è in
  2. Prendi il byte (avvolta da un flusso è bello)..
  3. Ottenere di scrivere un codificatore appropriato.
  4. Utilizzare il codificatore per ottenere la stringa (il wrapping del flusso piacevole con un test di stampa è più bello).

Fase 3 può essere semplice (oh, mi basta usare che uno!) O duro (accidenti, sono a scrivere io!), O una via di mezzo (hey, nessuno scritto uno di questi già ?!)

+0

Quello che voglio dire è che voglio trasformare il personaggio in U + 73A9 – Mass

+0

char c = '\ u73a9'; –

+0

@ Greg- grazie, ma lo voglio al contrario. Voglio qualcosa come 玩 -> \ u73a9 – Mass

0

Un po 'esempio più lungo, che segue il modello di risposta di Jon Hanna:

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

Problemi correlati