Usted puede utilizar esto en la ventana inmediata:
str.Contains("\u8203");
o ponerlo en la ventana de inspección por lo que sólo voy tiene que hacer clic en el botón de actualización cerca del valor observado para ver el resultado, en lugar de volver a ingresarlo a la inmediata (aunque ! Siempre se puede presionar hacia arriba y luego ingresar a volver a entrar en el último comando)
para comprobar cualquier personaje oculto, puede tener una matriz estática con todos los personajes ocultos y comprobar:
HIDDENS.Any(c => str.Contains(c.ToString())
y preferible incluso salvar los personajes ocultos como cadenas de una sola longitud y luego hacer:
HIDDENS.Any(str.Contains)
O bien, podría ser muy sofisticada y hacer esto:
private static readonly Bitmap BMP = new Bitmap(1000, 1000);
private static readonly Graphics GRAPHICS = Graphics.FromImage(BMP);
private static readonly Font FONT = new Font("Arial", 20);
private static readonly RectangleF RECT = new RectangleF(0, 0, 1000, 1000);
public static bool CheckInvisibleChars(string text)
{
var stringFormat1 = new StringFormat(StringFormatFlags.MeasureTrailingSpaces);
stringFormat1.SetMeasurableCharacterRanges(
Enumerable.Range(0, text.Length - 2).Select(i => new CharacterRange(i, 1)).ToArray());
return GRAPHICS.MeasureCharacterRanges(text, FONT, RECT, stringFormat1).Any(
reg => reg.GetBounds(GRAPHICS).Width.Equals(0f));
}
Desde aquí también debe ser fácil para devolver información acerca de cada personaje oculto, etc.
esta no funcionan – Petr
@Petr : Sin más información, no es un comentario útil. Por favor, den un * ejemplo * de dónde no funciona, o hagan una nueva pregunta. –
@Petr no funcionaba porque había un error en la referencia de caracteres de espacio de ancho cero. Debería especificarse en formato HEX - ** '\ u200B' ** y no como en el formato DEC - '\ u8203'. –