2012-07-28 16 views
17

Tengo el siguiente String caracteres.caracteres Unicode cadena

string s = "\\u0625\\u0647\\u0644"; 

Al imprimir la secuencia anterior, me sale:

\u0625\u0647\u062 

¿Cómo puedo obtener los caracteres Unicode imprimibles reales en lugar de esta representación \ uxxxx?


he encontrado la respuesta:

s = System.Text.RegularExpressions.Regex.Unescape(s); 
+3

encuentro la pregunta un poco vago, se controla esa cadena? Si es así, simplemente elimine una de las barras invertidas, es decir. "\ u1234 \ u5678". De lo contrario, debería considerar usar regex con un método de devolución de llamada para analizar el número, convertirlo en un carácter y luego devolver ese carácter como una cadena – Onkelborg

+0

¿Qué quiere decir con "no puede controlar la cadena"? ¿Cuál es tu situación? –

+1

Ok, encontré la respuesta: System.Text.RegularExpressions.Regex.Unescape() –

Respuesta

1

Trate Regex:

String inputString = "\\u0625\\u0647\\u0644"; 

var stringBuilder = new StringBuilder(); 
foreach (Match match in Regex.Matches(inputString, @"\u([\dA-Fa-f]{4})")) 
{ 
    stringBuilder.AppendFormat(@"{0}", 
           (Char)Convert.ToInt32(match.Groups[1].Value)); 
} 

var result = stringBuilder.ToString(); 
3

Si realmente no controla la cadena, y es necesario sustituir esas secuencias de escape con su valores:

Regex.Replace(s, @"\u([0-9A-Fa-f]{4})", m => ((char)Convert.ToInt32(m.Groups[1].Value, 16)).ToString()); 

y espero que no tenga \\ escapes allí también.

+1

La respuesta correcta que funciona es System.Text.RegularExpressions.Regex.Unescape() –

+0

Eso hace mucho más que simplemente reemplazar los escapes de Unicode ... – Joey

+1

Creo que el MatchEvaluator debería ser: 'm => ((char) Convertir .ToInt32 (m.Groups [1] .Value, 16)) .ToString() '. – Otiel

Cuestiones relacionadas