2010-08-26 25 views
5

Digamos que tengo un carácter chino aleatorio, 玩. Quiero convertirlo a Unicode, que sería U + 73A9. ¿Cómo podría hacer esto en C#?Conversión de caracteres chinos a Unicode

+3

¿De dónde viene este caracter chino? ¿Entrada de teclado? ¿De un archivo en el disco? ¿Qué página de códigos o codificación se usa en ese archivo? (Chino simplificado, chino tradicional, o ??) Necesita saber qué codificación se utiliza en los bytes de entrada antes de poder convertirlo de manera significativa a alguna otra codificación. – dthorpe

+0

Entrada de teclado, usando UTF (16 supongo que debería tener la mayoría de los caracteres), simplificado o tradicional. – Mass

Respuesta

5

Take mychar como un char incluir su carácter especial ...

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

encima estamos emitir un carácter seguido por el punto de código Unicode y entonces el valor entero.

Reducir la cadena de formato y los parámetros de salida sólo el código "U + ..." ...

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

¡Gracias, esto es asombroso! ¿Podrías explicarme el código? Entiendo que estás escribiendo el U +, pero ¿qué es '{0: x4}'? Sé que uno de ellos es especificador, entonces, ¿qué es ': x4'? – Mass

+2

El 'x4' lo emite como hex (x), 4 dígitos cero rellenos a la izquierda. – Chris

+0

¡Gracias! (15 caracteres ...) – Mass

2

El characater 玩 está en Unicode.

Si lo tiene en C# como 玩, entonces está actualmente en UTF-16, que es uno de los formularios de codificación Unicode.

Si está obteniendo es de otro lugar que necesita para:

  1. Encuentra la codificación que está en
  2. Obtener los bytes (envuelto por una corriente es agradable)..
  3. Obtenga de escritura un codificador apropiado.
  4. Usa el codificador para obtener la cadena (envolver la buena secuencia con un lector de texto es más agradable).

paso 3 puede ser simple (oh, yo sólo uso que uno!) O difícil (maldito, tiene que escribir yo mismo!) O en algún punto intermedio (hey, alguien escribe uno de estos ya ?!)

+0

Lo que quiero decir es que quiero convertir el personaje en U + 73A9 – Mass

+0

char c = '\ u73a9'; –

+0

@ Greg- gracias, pero lo quiero al revés. Quiero algo como 玩 -> \ u73a9 – Mass

0

Un poco más largo ejemplo, que sigue el patrón de respuesta de 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

Cuestiones relacionadas