2011-12-19 17 views
8

Tengo una cadena Unicode de un archivo de texto de tal manera que. Y quiero mostrar el personaje real.Cómo deshacer la cadena Unicode en C#

Por ejemplo:

\u8ba1\u7b97\u673a\u2022\u7f51\u7edc\u2022\u6280\u672f\u7c7b 

Al leer esta cadena de archivo de texto, usando StreamReader.ReadToLine(), es escapar de la \ a '\\' como "\\u8ba1", que no se quería.

Mostrará la cadena Unicode igual que desde el texto. Lo que quiero es mostrar el personaje real.

  1. Cómo puede cambiar "\\u8ba1" a "\u8ba1" en la cadena de resultados.
  2. ¿O debería utilizar otro lector para leer la cadena?
+0

posible duplicado de [¿Por qué cuando leo de un documento XML obtengo \ r \ r \ n \ n etc etc.?] (Http://stackoverflow.com/questions/5980968/why-when-i-read- from-an-xml-document-do-i-get-rrnn-etc-etc) – dtb

+0

Puede proporcionar codificación en el constructor StreamReader – Anand

+0

posible duplicado de [Cómo convertir secuencias de escape unicode a caracteres Unicode en una cadena .NET] (http://stackoverflow.com/questions/183907/how-do-convert-unicode-scape-sequences-to-unicode-characters-in-a-net-string) – dtb

Respuesta

14

Si usted tiene una cadena como

var input1 = "\u8ba1\u7b97\u673a\u2022\u7f51\u7edc\u2022\u6280\u672f\u7c7b"; 

// input1 == "计算机•网络•技术类" 

que no es necesario unescape nada. Es solo el literal de la cadena que contiene las secuencias de escape, no la cadena misma.


Si usted tiene una cadena como

var input2 = @"\u8ba1\u7b97\u673a\u2022\u7f51\u7edc\u2022\u6280\u672f\u7c7b"; 

puede unescape que utilizando la siguiente expresión regular:

var result = Regex.Replace(
    input2, 
    @"\\[Uu]([0-9A-Fa-f]{4})", 
    m => char.ToString(
     (char)ushort.Parse(m.Groups[1].Value, NumberStyles.AllowHexSpecifier))); 

// result == "计算机•网络•技术类" 
+1

Uno puede también utilizar la estática 'Regex.Unescape'. – Oded

+2

No, Regex.Unescape es solo para los caracteres Regex – marsze

+0

Realmente gracias. Hiciste mi día –

0

Esta cuestión salió en el primer resultado cuando buscando en Google, pero pensé debería haber una manera más simple ... esto es lo que terminé usando:

using System.Web; 

//... 

string x = HttpUtility.UrlDecode("Ingl\u00e9s"); 
Console.Write(x); // Inglés